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

标签 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?如何轻松检查我是否到达了随机文件的末尾?

最佳答案

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

feof 返回 true (1)。当您第一次打开文件并且没有读取任何内容时,您还没有读到末尾,因此它返回 0。

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

关于c - 为什么 feof() 在任何操作之前返回 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31862682/

相关文章:

c - 父进程和子进程

c++ - void(param); 的意义/用途是什么?在功能开始时?

c - 使用 fread() 时出现段错误

c - 如何从一行接受一定量的输入

c++ - 如果我在 C++ 中调用 new,但堆内存不足,会发生什么情况?

c - 无意的无限 'for' 循环

c - 如何在 C 文件中包含 gtk/gtk.h

c - 驻留在一个内存地址的两个整数变量?

C语言~数据文件利用delete函数修改文本文件内容(File IO)

c - 使用 Code::Blocks 克服 DLL hell