加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – fgets在文件中逐行读取

发布时间:2020-12-16 04:52:10 所属栏目:百科 来源:网络整理
导读:我知道fgets读取直到EOF或换行符. 我写了一个示例代码来读取文件中的行,我观察到fgets执行的次数超过了所需的次数.这是一个非常简单的文件,只有两个空行,即.我按了一次输入并保存了文件. 以下是代码: fp = fopen("sample.txt","r");while (!feof(fp)) { fge
我知道fgets读取直到EOF或换行符.

我写了一个示例代码来读取文件中的行,我观察到fgets执行的次数超过了所需的次数.这是一个非常简单的文件,只有两个空行,即.我按了一次输入并保存了文件.

以下是代码:

fp = fopen("sample.txt","r");
while (!feof(fp)) {
        fgets(line,150,fp);
        i++;
        printf("%s",line);
}
printf("%d",i);

为什么while循环执行三次而不是2次,因为文件中只有两个空行?

解决方法

在你的情况下,最后一行似乎是两次阅读,但事实并非如此.对fgets的最后一次调用返回NULL以指示已读取文件的结尾.您不检查,并再次打印缓冲区的旧内容,因为缓冲区未更新.

通常最好不要使用feof并检查f …系列函数的返回值:

fp = fopen("sample.txt","r");
while (1) {
        if (fgets(line,fp) == NULL) break;
        i++;
        printf("%3d: %s",i,line);
}
printf("%dn",i);

在尝试读取超出文件末尾的函数后,函数feof返回true,这只发生在fgets的最后一次(不成功)调用之后,fgets尝试读取或者更确切地说是在文件结束之前读取.这个long SO post的答案解释得更多.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读