提问人:skk 提问时间:4/17/2021 最后编辑:Vlad from Moscowskk 更新时间:4/17/2021 访问量:81
在 C 中再次循环 [duplicate]
loop once more in C [duplicate]
问:
我编写了逐行读取文件(argv1)的c程序
我的文本文件是这样的:
这是我的代码
#include <stdio.h> #include <stdlib.h> void read_fp(FILE *fp){ char buffer[50]; fgets(buffer, sizeof(buffer), fp); printf("%s", buffer); } int main(int argc, char* argv[]){ FILE* fp = fopen(argv[1], "r"); while(1){ if(feof(fp)) break; read_fp(fp); } return 0; }
或
int main(int argc, char* argv[]){ FILE* fp = fopen(argv[1], "r"); while(!feof(fp)){ read_fp(fp); } return 0; }
我预测我的程序打印 一 二 三 四 五 六
但程序实际上打印 一 二 三 四 五 六 六
它再次循环
为什么。。。?我怎样才能解决这个问题
答:
1赞
Vlad from Moscow
4/17/2021
#1
读取文件的最后一条记录后,条件尚未设置。feof( fp )
因此,在函数中,您正在尝试再次访问该文件
void read_fp(FILE *fp){
char buffer[50];
fgets(buffer, sizeof(buffer), fp);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
printf("%s", buffer);
}
在这种情况下,条件得到满足,并且返回的调用。但是您输出的当前值存储在其中,这会导致未定义的行为。fgets
NULL
buffer
您可以更改功能,例如
void read_fp(FILE *fp){
char buffer[50];
If ( fgets(buffer, sizeof(buffer), fp) ) printf("%s", buffer);
}
评论
feof
。若要检测文件末尾,请查看返回的内容。如果返回 ,则它没有从文件中读取任何内容。fgets
fgets
NULL