为什么feof()在任何操作之前返回0?

时间:2015-08-06 17:58:35

标签: c

我想知道feof()是多么令人兴奋。我写了一些简单的程序来解决它,但结果远离我的预期。这是一个代码

#include <stdio.h>
#include <stdlib.h>




int main()
{

  FILE* infile = fopen("obrazek.bmp","r");

  int a;

  while (feof(infile) != 0)
  {

  fread(&a, sizeof(a),1, infile);

  //int n = feof(infile);

 printf("%i",a);

  };


 fclose(infile);

 return 0;

}

如果我只打开一个文件,为什么feof()会返回0?如何轻松检查我是否输入了一个随机文件?

1 个答案:

答案 0 :(得分:1)

如果您之前尝试读取文件的末尾,并且尚未使用feof清除它,则

clearerr将返回true(1)。当您第一次打开文件并且没有阅读任何内容时,您还没有读过结尾,所以它返回0.

此行为是while(feof(infile) != 0)使用almost always wrong的原因。相反,您应该检查fread调用的返回值,并使用它来控制循环。