微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 C 中再次循环

如何解决在 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);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。