包袱里有抱负 2015-11-27 15:11 采纳率: 0%
浏览 1672
已采纳

为什么这段代码循环输出的数组少了第一个元素且多出了一个随机数?

输入一些非负实数 用数组输出这些数 求平均数并输出(输入负数时报错并退出重新输入,输入回车时执行下一步操作)

#include
using namespace std;
int main()
{
int i,j,k;
double a[100],sum=0,avr;
part1:
cout<<"输入数字"< j=0,k=0;
for (i=0;getchar()!='\n';i++)
{
cin>>a[i];
if (a[i]< 0)
{
j=1;
}
k++;
}
if(j==1)
{
cout<<"您在数据中输入了一个负数"<<endl;
goto part1;
}
cout<<"输入的数据为:"<<endl;
for(i=0;i<=k;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
for(i = 0;i<=k;i++)
{
sum=sum+a[i];
}
avr=sum/(k+1);
cout<<avr;
return 0;
}

  • 写回答

5条回答 默认 最新

  • ysuwood 2015-11-27 15:57
    关注

    .用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符..如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.

    第一个字符被getchar()用掉了。

        for (i=0;getchar()!='\n';i++)
        {
            cin>>a[i];
            if (a[i]< 0)
            {
                j=1;
            }
            k++;
        } 
    

    后面的循环应该是i<k,多了一次,输出了一个随机数

        for(i=0;i<=k;i++)
        {
            cout<<a[i]<<" ";
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?