Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中读取文件时出错_C - Fatal编程技术网

在C中读取文件时出错

在C中读取文件时出错,c,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 = fsca

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

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;
}
您不会检查“inside”
fscanf
是否实际成功。如果您在文件的末尾,它将不会读取任何内容,
&address
不会得到更新,
rv
0
读取字节

然后,无条件地打印出
地址中的内容,这恰好是您成功读取的最后一行内容

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

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

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

使用
%llu
,而不是
%lli”
,来读取
无符号long
值。(与
“%lli”
不同,
“%lld”
“%llu”
都不支持十六进制和八进制;似乎没有很好的解决方案。)
如果(file==NULL){perror(argv[1]),则返回1;}
while((rv = fscan(...)) != EOF) {
    printf(...);
}