使用fgets时EOF不起作用

时间:2016-01-28 08:40:52

标签: c file

我试图用fgets读取整个文件,当我在while循环中使用它时,它永远不会结束。 当我使用fscanf时,一切正常。

while((fscanf(f,"%s",ime)) != EOF)
   {
       fputs(ime,p);
       fputc('\n',p);
   }

但这不起作用,如何解决?我得到无限循环

while((fgets(ime,100,f)) != EOF)
    {
        fputs(ime,p);
        fputc('\n',p);
    }

我应该放什么!= EOF这样循环在文件结尾时结束?

2 个答案:

答案 0 :(得分:9)

真的很难阅读documentation吗?

char *fgets(char *str, int n, FILE *stream)
     

成功时,该函数返回相同的str参数。如果遇到文件结尾且未读取任何字符,则str的内容保持不变,并返回空指针。   如果发生错误,则返回空指针。

while((fgets(ime,100,f)) != NULL)

答案 1 :(得分:3)

更改为

while((fgets(ime,100,f)) != NULL)

根据手册页

  

char *fgets(char *s, int size, FILE *stream);

     

fgets()在成功时返回s,在出错时或结束时返回NULL          在没有读取任何字符时发生文件。