我今年将参加我的第一堂编程课,对此我有点困惑。我目前正在尝试学习 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()
的语义不是你想象的那样:也就是说,它们不检查下一个读取是否会到达文件末尾。相反,在从 read
(或其他类似调用)获得零后,feof
允许您区分读取错误和文件末尾。
解决您的问题很简单:正确使用您调用的函数。 fscanf
返回一个值 - 您应该找出该值是什么,更重要的是,它意味着什么。
关于c - 计算总和时重复最后一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21651534/