问题描述
我的文本文件是这样的:
这是我的代码
#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,"r"); while(!feof(fp)){ read_fp(fp); } return 0; }
我预测我的程序打印 一 二 三 四 五 六
但程序实际打印 一 二 三 四 五 六 六
它再次循环
为什么……?我该如何解决这个问题
解决方法
读取文件的最后一条记录后,条件 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,fp) ) printf("%s",buffer);
}