在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(...);
}