This question already has answers here:
Why is “while ( !feof (file) )” always wrong?
(4个答案)
6年前关闭。
我今年要参加第一门编程课,对此我有些困惑。我正在尝试学习当前的fopen和fclose函数。
我的代码是
当我对此进行编译以求和时,data.dat文件的最后一个值被计数两次。
我想知道如何解决这个问题。
谢谢!
(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
返回一个值-您应该找出该值是什么,更重要的是,它意味着什么。