我试图设计一个程序,计算任何期望浮点数的平均值,直到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) {
}

另外,我故意更改了变量的名称,以说明更好的命名方法。

09-26 12:45