This question already has answers here:
Why is “while ( !feof (file) )” always wrong?
                                
                                    (4个答案)
                                
                        
                                6年前关闭。
            
                    
我今年要参加第一门编程课,对此我有些困惑。我正在尝试学习当前的fopen和fclose函数。

我的代码是

int main(void)
{
        FILE *input; /* Pointer to the input file */
        double values;
        double sum;

input = fopen("data.dat", "r"); /* Prepare file for input */

sum = 0;
while (!feof(input))
{       fscanf(input, "%lf", &values);
    sum = sum + values;
}

printf("The sum of the values is %f\n", sum);

fclose(input);
return 0;
}


当我对此进行编译以求和时,data.dat文件的最后一个值被计数两次。
我想知道如何解决这个问题。
谢谢!

最佳答案

您不应该使用while(!feof(...)),因为它总是错误的。为什么?

如您所知,它将比您预期的多循环一次。发生这种情况是因为feof()的语义与您的想法无关:也就是说,它们不检查下一次读取是否到达文件末尾。相反,通过feof,您可以在从read(或某些其他类似调用)获得零后,区分读取错误和文件结尾。

解决问题的方法很简单:使用正确调用的函数。 fscanf返回一个值-您应该找出该值是什么,更重要的是,它意味着什么。

10-07 13:37
查看更多