该函数从文件中读取未知数量的整数并计算平均值。由于某种原因,文件中的最后一个元素被读取了两次。有人可以解释为什么吗?我知道如何解决它,但想知道幕后发生的事情。
int total = 0, count = 0, input;
FILE *filePtr;
filePtr = fopen("file.txt", "r");
if (filePtr != NULL)
do
{
fscanf(filePtr, "%d", &input);
total = total + input;
count++;
} while (!feof(filePtr));
printf ("%d", total);
我通过在循环中添加第二个
if
来修复它: do
{
fscanf(filePtr, "%d", &input);
if (!feof(filePtr))
{
total = total + input;
count++;
}
} while (!feof(filePtr));
最佳答案
您不是在检查fscanf
实际是否找到数字。上一次调用将失败,因为您很可能只是在文件的最后一个换行符中读取。
试试这个:
do
{
if (fscanf(filePtr, "%d", &input)==1) {
total = total + input;
count++;
}
} while (!feof(filePtr));
编辑:@Andrew是正确的-您应该真正在循环顶部检查EOF:
while (!feof(filePtr)) {
/* ... */
}