我试图设计一个程序,计算任何期望浮点数的平均值,直到EOF。程序还应检查输入是否正确,并在输入字符串时返回“错误输入”。我写的代码是有效的,但它给出的平均值是错误的有人能告诉我为什么吗?
#include <stdio.h>
int main(void) {
int times = 0;
float sum = 0;
float scan;
float avrg;
int scanvalue = 1;
while (scanvalue == 1) {
scanvalue = scanf("%f", &scan);
sum = sum + scan;
times++;
}
if (scanvalue == EOF) {
avrg = sum / times;
printf("The average is %f\n", avrg);
} else {
printf("Wrong input");
}
return 0;
}
谨致问候。
最佳答案
在scanvalue
之后不检查scanf()
,仍然使用scan
处的值,这会弄乱平均值。请注意,当scanf()
返回EOF
时,它不会修改scan
,因此它仍将具有最后一个值,因此您将最后一个值相加两次。
但是,如果在开头输入无效的输入,则行为未定义,请将其更改为
while ((result = scanf("%f", &value)) == 1) {
}
另外,我故意更改了变量的名称,以说明更好的命名方法。