在 C 中再次循环

问题描述

我编写了逐行读取文件 (argv1) 的 c 程序

我的文本文件是这样的:

enter image description here

这是我的代码

#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);
}