从C错误

时间:2016-10-21 21:06:23

标签: c

我试图逐行读取文件中的值并打印它们..输出是它打印最后一行两次..为什么它会这样做,因为最后一行是文件的结尾?

int main(int argc, char* argv[]) {

    FILE *file = fopen(argv[1], "r");
    if (file == NULL){
        printf("error\n");
        return 1;
    }
    unsigned long long address;
    int rv = fscanf(file, "%lli", &address);
    printf("%lli\n", address);
    do{
        rv = fscanf(file, "%lli", &address);
        printf("%lli\n", address);
    } while (rv!=EOF);

    fclose(file);
    return 0;
}

1 个答案:

答案 0 :(得分:4)

您不检查“内部”fscanf是否实际成功。如果你在文件的末尾,它将不会读取任何内容,&address没有得到更新,rv获取0读取的字节。

然后你无条件地打印出address中的任何内容,这恰好是你最后成功阅读的内容 - 最后一行。

不要使用do / while,请使用while()

while((rv = fscan(...)) != EOF) {
    printf(...);
}

这样,如果fscanf失败,就不会执行printf。

do / while基本上是“至少执行以下一次”,而while是“执行以下零次或多次”。