函数名

  feof

功 能

  检测流上的文件结束符

用 法

  int feof(FILE *stream);

程序例

  #include <stdio.h>   int main(void)   {   FILE *stream;   /* open a file for reading */   stream = fopen("DUMMY.FIL", "r");   /* read a character from the file */   fgetc(stream);   /* check for EOF */   if (feof(stream))   printf("We have reached end-of-file\n");   /* close the file */   fclose(stream);   return 0;   }   feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为1,否则为0。   EOF是文件结束标志的文件。在文本文件中,数据是以字符的ASCⅡ代码值的形式存放,ASCⅡ代码的范围是0到255,不可能出现-1,因此可以用EOF作为文件结束标志。   当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ASCI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件。   “C”语言的“feof()”函数和数据库中“eof()”函数的运做是完全不同的。数据库中“eof()”函数读取当前指针的位置,“C”语言的“feof()”函数返回的是最后一次“读操作的内容”。多年来把“位置和内容”相混,从而造成了对这一概念的似是而非。   那么,位置和内容到底有何不同呢?举个简单的例子,比如有人说“你走到火车的最后一节车箱”这就是位置。而如果说“请你一直向后走,摸到铁轨结束”这就是内容。也就是说用内容来判断会“多走一节”。这就是完全依赖于“while(!feof(FP)){...}”进行文件复制时,目标文档总会比源文档“多出一些”的原因。   在“C”文件读取操作时不能完全依赖于“while(!feof(FP)){...}”的判断。下面代码是改进后的代码,该代码执行后output文件内容和input文件内容一致,与使用“while(!feof(FP)){...}”相比,input文件的结尾符号(EOF)没有被读入到output文件中。   //main.c linux 下编译通过。   int main(void)   {   FILE *in, *out;   int ch;   if ((in = fopen("./input.txt", "r"))== NULL) //input.txt must exist in current directory.   {   fprintf(stderr, "Cannot open inputfile\n");   exit(0);   }   if((out=fopen("./output.txt","w"))==NULL)   {   fprintf(stderr,"Can not open the file.\n");   exit(0);   }   while(1)   {   ch=fgetc(in);   if(ch == -1)   break;   fprintf(stdout,"The ASC of char %c is %d\n ",ch,ch);   fputc(ch,out);   }   fclose(in);   fclose(out);   return 0;   }   与EOF的区别   在stdio.h中可以看到如下定义:   #define EOF (-1)   #define _IOEOF 0x0010   #define feof(_stream) ((_stream)->_flag & _IOEOF)   int c;   while(!feof(fp))   {   c = fgetc(fp);   printf("%X\n", c);   }   会发现多输出了一个FF,原因就是在读完最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。直到再次调用fgetc()执行读操作,feof()才能探测到文件结尾。这样就多输出了一个-1(即FF)。   正确的写法应该是:   int c;   c = fgetc(fp);   while(!feof(fp))   {   printf("%X\n", c);   c = fgetc(fp);   }

  feof()可以用EOF代替吗?不可以。fgetc返回-1时,有两种情况:读到文件结尾或是读取错误。因此我们无法确信文件已经结束, 因为可能是读取错误! 这时我们需要feof()。

注意:
即使文件是空的,也要再读一次,feof函数值才会变为真。
因为只有读出所有的数据之后,再读一次,函数feof(fp)的返回值才为真。
要想正常读取:
#include<stdio.h>
#include<stdlib.h>
main()
{FILE *fp;int a;if((fp=fopen("c:\\number.txt","r"))==NULL){printf("文件打开失败!\n");exit(0);}
fscanf(fp,"%d",&a);
while(!feof(fp))         /*等价于while(feof(fp)==0)*/
{
printf("%d ",a);
fscanf(fp,"%d",&a);
}
fclose(fp);
}

C语言中的feof函数相关推荐

  1. c语言feof函数_使用示例的C语言中的feof()函数

    c语言feof函数 C语言中的feof()函数 (feof() function in C) Prototype: 原型: int feof(FILE* filename); Parameters: ...

  2. c语言中的printf函数_C语言中的printf()函数与示例

    c语言中的printf函数 C语言中的printf()函数 (printf() function in C) The printf() function is defined in the <s ...

  3. c语言的point函数,C语言中friend友元函数详细解析

    C语言中friend友元函数详细解析 友元函数是可以直接访问类的私有成员的非成员函数.它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字frien ...

  4. C语言中的strstr函数

    C语言中的strstr函数 说到strstr函数,可能很多人会比较陌生,对比其他的字符串函数比如strcpy,strcmp等等,它的确比较少用,但其实他也是一个非常有用和常见的函数,今天,就让我们一起 ...

  5. C语言中的atoi函数的实现

    C语言中有很多的库函数,其实平时没事的时候多去实现一下里面的库函数还是很有用的,下面就来讲一讲C语言中的atoi函数,这个函数的主要功能是将一个字符串转化为一个数字,可能第一眼看上去,你会觉得这是一个 ...

  6. main c语言中变量的定义,C语言中在main函数中定义的变量是全局变量么_后端开发...

    PHP 和 JavaSript 区别_后端开发 PHP是一种创建动态交互性站点的强有力的服务器端脚本语言,主要用于Web开发领域,而JavaSript是一种具有函数优先的轻量级,解释型或即时编译型的高 ...

  7. C语言中的sprint函数,求sprintf函数的详解

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:求sprintf函数的详解,要附带例,粘贴来的也可以,只 问题详情:还有就是我还想要一些常用的宽度修饰之类的输入或者输出格式:回答: ...

  8. c语言里面gets(a)是什么意思,C语言中的gets()函数

    在c语言中读取字符串有多种方法,比如scanf() 配合%s使用,但是这种方法只能获取一个单词,即遇到空格等空字符就会返回.如果要读取一行字符串, 比如:I love MIT 这种情况,scanf() ...

  9. C语言中的Sleep函数的解读

    Sleep函数: 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned seconds); 注意: 在VC中使用带上头文件#include <windows.h& ...

最新文章

  1. C++ 重定位输入输出
  2. nginx加密,访问接口认证
  3. 购买过php,【已解决】PHP项目需求:用户购买商品时,给上级发送一条通知(无限级下级会员)...
  4. 德勤加入阿里云原生合作伙伴计划,强强联手开创数字化咨询新风向
  5. 怎么将pdf转换成word
  6. Vue3 VSCode新建项目报错The template root requires exactly one element.
  7. E - Escape from the Island(最短路+dp)
  8. matlab曲线拟合 新浪,Matlab曲线拟合
  9. c语言删除数组重复元素并升序,C语言编程题: 编写函数,从一个已经排序的数组中删去某数后,该数组仍然有序....
  10. QBC的distinct查询
  11. Spring Boot 概述、初始化器、spring-boot-maven-plugin 插件简化部署、starter 自动配置原理
  12. 照片一寸改成二寸,并压缩体积KB的工具
  13. HTML5生日快乐代码 (烟花蛋糕+3D相册) HTML+CSS+JavaScript
  14. 用计算机控制人造卫星属于,用计算机控制人造卫星属于 为什么人造卫星在高层大气...
  15. CAB 写inf文件
  16. postgreSQL 获取当前连接的IP
  17. arduino IED2.0实现Serial.println打印结果
  18. 阿里云心选“小眯眼摄像头”视频监控天猫精灵可控手机远程wifi高清
  19. 如何查看笔记本电脑固态硬盘接口与接口协议
  20. “智慧青岛”里的海信力量

热门文章

  1. nodemailer如何配置公司邮箱发送邮件
  2. 蓝桥杯【第12届真题】Python 实现
  3. 今日头条有意向收购锤子科技;原金立总裁加入小米;苹果应用商店出现查开房记录app|雷锋早报...
  4. web课程设计网页规划与设计:鲜花网站设计——基于HTML+CSS+JavaScript制作网上鲜花网页设计(5页)
  5. DA接口测试工装研究
  6. Zotero+Obsidian+Bookxnote联动让文献阅读丝滑般体验
  7. DOS中SET命令的详细用法
  8. 由爆火的“羊了个羊”浅谈小游戏开发
  9. jspdf与zip.js结合。解决转pdf文件清晰度与文件过大的问题
  10. cesium实现晴,雨,雾,雪等效果