C ++错误的平均结果

时间:2018-10-07 10:41:34

标签: c++

我的C ++程序有问题。我必须制作一个简单的程序,将用户输入的值相加并求和,然后计算平均值。该程序必须计算平均值,直到用户输入0。

int value;
float sum = 0.0;
int counter = 0;
float average;

cout << "Enter value " << endl;
cin >> value;

while (value != 0)
{
    cout << "Enter value" << endl;
    cin >> value;
    counter++;
    sum += value;
}

average = sum / counter;
cout << "Average = " << average;


return 0;

当我介绍3 + 3 + 2时,我得到1.66667,但应该是2.66667,这是我做错了什么?请有人能解释一下该程序如何工作。我不能在这里使用方法,而只能使用简单的while循环,而且我不知道会有多少个数字。

3 个答案:

答案 0 :(得分:3)

像这样更改while循环

while (value != 0)
{
    counter++;
    sum += value;
    cout << "Enter value" << endl;
    cin >> value;
}

答案 1 :(得分:1)

不要写重复的代码

cout << "Enter value " << endl;    ////// 1
cin >> value;                      ////// 2
// counter++;      MISSING!
// sum += value;   MISSING!

while (value != 0)
{
    cout << "Enter value" << endl; ////// 1
    cin >> value;                  ////// 2
    counter++;
    sum += value;
}

因为引入错误的机会是错误的两倍。相反:

 for(;;) // for-ever
 {
     cout << "Enter value: ";
     if(!(cin >> value) || value == 0)
         break;

     counter++;
     sum += value;
 }

计划B(简称):

 while(cout << "Enter value: ",
       (cin >> value) && value != 0) {
     counter++;
     sum += value;
 }

答案 2 :(得分:1)

之所以出现此问题,是因为由于您编写代码的方式,在计算用户输入的所有值的sum时错过了用户的首次输入:

cout << "Enter value " << endl;
cin >> value;  // first user input

while (value != 0)
{
    cout << "Enter value" << endl;
    cin >> value;  // This override the first user input
    counter++;
    sum += value;  // The first input never make it to this summation
}

此外,如果用户输入nan作为第一个输入,则将得到输出0,因为在这种情况下,您的程序正在执行除以零的操作:

average = sum / counter; //counter is initialized with 0

对于这种情况,do-while循环更为合适。您可以这样做:

int value;
float sum = 0.0f;
int counter = 0;
float average = 0.0f;

do {
    cout << "Enter value:" << endl;
    cin >> value;
    if (value != 0) {
        counter++;
        sum += value;
    }
} while (value != 0);

if (counter > 0) {
    average = sum / counter;
}
cout << "Average = " << average << endl;