该函数从文件中读取未知数量的整数并计算平均值。由于某种原因,文件中的最后一个元素被读取了两次。有人可以解释为什么吗?我知道如何解决它,但想知道幕后发生的事情。

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)) {
    /* ... */
}

08-19 09:34