我的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循环,而且我不知道会有多少个数字。
答案 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;