在C中再次循环
我编写c程序,逐行读取文件(argv) 我的文本文件如下: 这是我的密码 #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; } #包括 #包括 无效读取\u fp(文件*fp){ 字符缓冲区[50]; fgets(缓冲区,sizeof(缓冲区),fp); printf(“%s”,缓冲区); } int main(int argc,char*argv[]){ 文件*fp=fopen(argv[1],“r”); 而(1){ 如果(feof(fp))中断; 读fp(fp); } 返回0; } 或 int main(int argc,char*argv[]){ 文件*fp=fopen(argv[1],“r”); 而(!feof(fp)){ 读fp(fp); } 返回0; } 我预测我的程序打印 一 二 三 四 五 六 但这个程序实际上是打印的 一 二 三 四 五 六 六 它再次循环在C中再次循环,c,loops,undefined-behavior,fgets,feof,C,Loops,Undefined Behavior,Fgets,Feof,我编写c程序,逐行读取文件(argv) 我的文本文件如下: 这是我的密码 #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
为什么。。。?读取文件的最后一条记录后,如何修复此问题尚未设置条件feof(fp) 因此,在函数中,您尝试再次访问该文件
void read_fp(FILE *fp){
char buffer[50];
fgets(buffer, sizeof(buffer), fp);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
printf("%s", buffer);
}
在这种情况下,条件满足,fgets
的调用返回NULL
。但是您正在输出存储在缓冲区中的当前值,这将导致未定义的行为
您可以更改函数,例如
void read_fp(FILE *fp){
char buffer[50];
If ( fgets(buffer, sizeof(buffer), fp) ) printf("%s", buffer);
}
. 要检测文件结尾,请查看fgets
返回的内容。如果fgets
返回NULL
,则它没有从文件中读取任何内容。
void read_fp(FILE *fp){
char buffer[50];
If ( fgets(buffer, sizeof(buffer), fp) ) printf("%s", buffer);
}