首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用feof(FILE *f)?

如何使用feof(FILE *f)?
EN

Stack Overflow用户
提问于 2010-11-29 05:50:23
回答 3查看 13.8K关注 0票数 2

我遇到了一个do-while循环,这个循环应该在我们到达文件末尾时停止。下面是循环代码:

代码语言:javascript
复制
do  {
    if (pcompanyRow[0] != '#' && pass == 1) {
        strtok(pcompanyRow, ":");
        pcompanyName = strcpy(pcompanyName, strtok(NULL, ""));
        pass = 2;
        fgets(pcompanyRow, 1024, f);
    }
    if (pcompanyRow[0] != '#' && pass == 2) {
        strtok(pcompanyRow, ":");
        pcompanySMSPrice = strcpy(pcompanySMSPrice, strtok(NULL , ""));
        pass = 3;
        fgets(pcompanyRow, 1024 , f);
    }
    if (pcompanyRow[0] != '#' && pass == 3) {
        strtok(pcompanyRow, ":");
        pcompanyMMSPrice = strcpy(pcompanyMMSPrice, strtok(NULL, ""));
        pass = 4;
        fgets(pcompanyRow, 1024, f);
    }
    if (pass == 4)  {
        AppendCompanyNode(pcompanyList, pcompanyName, pcompanySMSPrice, pcompanyMMSPrice);
        pass = 1;
    }
} while (!feof(f));

在使用调试器运行后,我注意到我遇到的所有崩溃问题都是因为它在到达整个行时都没有离开这个循环。

我应该如何正确地编写它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-29 06:12:26

我将更改您的循环和逻辑,以使用以下代码:

代码语言:javascript
复制
while (fgets(pcompanyRow, 1024, f) != NULL) {

    /* do things */

}

当fgets()试图读取超过文件末尾的内容时,它将返回NULL,您将中断循环。您仍然可以继续使用pass和其他标志/逻辑,但是您检查的条件将略有不同。

票数 4
EN

Stack Overflow用户

发布于 2010-11-29 06:01:11

您永远不应该使用feof()作为循环的退出指示器。feof()仅在读取文件结尾( EOF )后为TRUE,而不是在到达EOF时为TRUE

here。它还详细地解释了问题以及如何解决它。

票数 8
EN

Stack Overflow用户

发布于 2018-10-11 16:02:43

我建议同时使用fgets()和feof()。文件中的最后一个字符串可能有\n,也可能没有。如果仅使用feof(),则可以跳过(丢失)最后一行。

代码语言:javascript
复制
 for(;;)
 {char *pc;

  pc=fgets(buf,sizeof(buf),fd);

  if(!pc)
    {//it may be read error or end of file
      if(feof(fd))
        {//it is end of file, normal exit from for
         break;      
        }
       else
        {//it is i/o error 
         fclose(fd);
         return 2;
        }
    }
}//for
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4299296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档