c - 计算总和时重复最后一行?

标签 c

我今年将参加我的第一堂编程课,对此我有点困惑。我目前正在尝试学习 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/

相关文章:

python - 是否可以通过用 C 编写的内核模块来运行 Python 程序?

c - UNS_32 在哪里定义的?

c - 使用系统调用将文件内容写入标准输出?

c - sqlite3 关闭返回错误代码 5

c - 线程和信号量解决方案

c - dmalloc 提供返回地址信息显示 `unknown' ?

c - 尝试在 C 中打印链表节点 - 仅打印最后一个节点?

c - Sublime Text 2 C 编译

c - 在 C 代码中回归运行时相关降级的最佳方法

c - 我要覆盖我的链表吗?