这些函数都是和文件读写时发生错误有关,下面一一分析:

1:ferror

原型:int ferror(FILE * fp)

作用:测试一个文件流是否被设置了错误标识符,如果是返回非 0 整数,否则返回 0。

例子:

shortch;

FILE*f1;

f1= fopen("test.txt", "w");

ch=fgetc(f1);//注意,我们以 只写 方式打开了文件,但是却尝试向该文件读取一个字符,肯定会操作失败,这时,该文件流就会被设置上错误标识符

printf("%d\n", ch);//这里输出 -1 ,因为当fgetc函数操作失败时返回 EOF,即 -1

if(ferror(f1)){//用函数ferror测试文件流是否存在错误标识符

printf("Have a error.\n");//结果自然是,所以输出错误信息

}

fclose(f1);

注意:每次发生不同的操作错误都会更新文件流上次保存的错误标识符,例如:先后发生了A和B两个文件操作错误,并且A错误的标识符为16,B错误的标识符为32,那么文件流保存的错误标识符就是 32,用ferror(fp)读取返回的结果就是 32。

2:feof

原型:int feof(FILE * fp)

作用:测试一个文件流是否被设置了文件结束标识符,如果是返回非 0 整数,否则返回 0。

例子:

FILE *f1;shortch;

f1= fopen("utf8.txt", "r");/*此文件的十六进制结构为:

31 22

(共两个字节)*/

while(1){

ch=getc(f1);//在第三次循环执行getc语句时,由于文件指针已经指向了EOF,所以这次getc函数读取EOF值(-1)之后,如果指针再向后偏移一位,就发现不指向任何有效的位置了(这时指针不会发生偏移了),所以这时文件流会被设置上文件结束标识符

if(feof(f1)){break;

}

printf("%x\n", ch);

}

fclose(f1);/*输出:

31

22

Press any key to continue*/

注意:feof函数检测文件是否结束的方法很诡异,它不是检测当前文件指针是否指向EOF位置,而是检测EOF是否已经被读取出来了,就像上面代码的第三次循环,这时getc把EOF位置读取出来了,然后发现指针不能再向后面移动了,所以才给文件流设置上文件结束的标识。

3:clearerr

原型:voidclearerr(FILE * fp)

作用: 清除一个文件流的文件结束和错误标识符(即把文件结束符和错误标识符从非 0 值变成 0 值)。

例子:

FILE *f1;shortch;

f1= fopen("utf8.txt", "r");while(1){

ch=getc(f1);if(feof(f1)){break;

}

}//上面循环结束之后,文件流已经被设置了文件结束标志

printf("%d\n", feof(f1)==0);//输出 0,说明feof返回非 0 值,即检测到文件已经到结束位置

clearerr(f1);//清除文件流结束标志和错误标志

printf("%d\n", feof(f1)==0);//输出 1,说明feof返回 0 值,即检测到文件没到结束位置,虽然实际上已经到结束位置了

fclose(f1);

注意:调用文件指针重置函数rewind(原型:voidrewind(FILE * fp)),也会清除文件流的结束标志。

c语言 文件读取z整行操作,C语言文件操作函数之ferror feof clearerr相关推荐

  1. shell中for循环,读取一整行

    shell中for循环,读取一整行 shell中for循环的默认分隔符是:空格.tab.\n 需求是只以\n作为分隔符 shell for循环以\n作为分割符,方式一: 文件aa.sh [html]  ...

  2. C++ fscanf 读取一整行

    转自:https://www.cnblogs.com/luyi07/p/9527692.html scanf, fscanf很相似,都是从流中读取输入,然后赋值给变量 int scanf(const ...

  3. 输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据

    C程序,功能如题,代码如下: /* 功能:输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据 基本思路:产生一个长度为n的二维数组,将它作为一个循环队列来看待 */ #include ...

  4. EasyExcel实现文件读取、导出、上传、下载操作

    一.EasyExcel简介 ​     Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度 ...

  5. 多个Excel文件查找显示整行

    本文介绍的工具可以按一个关键字.多个关键字或汉字描述的条件进行查找,展示出整行信息,支持提取本行.上几行.下几行的信息到新的Excel文件中.同时包含指定行的提取.指定列的提取工具. 工具地址:www ...

  6. C语言 输入是一整行的字符串

    输入是一整行的字符串的 C语法: char buf[20]; gets(buf); C++语法: 如果用string buf;来保存: getline( cin , buf ); 如果用char bu ...

  7. 黑马程序员—文件读取路径及行读取的方式,今晚总算有点小懂

    ASP.Net+Android+IO开发S..Net培训.期待与您交流 以前文件读取总是一知半解,每次使用时都是这错拿错,代码每次写到一半就要去翻资料.今天自己来好好总结一下.第一个不明白的方就是文件 ...

  8. linux用分割的csv文件读取,在Linux中将制表符分隔的文件转换为CSV的最快方法

    在Linux中将制表符分隔的文件转换为CSV的最快方法 我有一个制表符分隔的文件,其中包含超过2亿行. 在Linux中将其转换为CSV文件的最快方法是什么? 该文件的确包含多行标题信息,我需要将其删除 ...

  9. c语言fread读取错误,【求助】C语言fread读取二进制文件时,读取结果全都是零

    C语言fread读取二进制文件时,读取结果全都是零,编译运行都没问题,但是就是结果显示不对,猜想可能有几个原因: 1. 大小端没处理好,设置了程序判断机器为little endian,但是,身为小白的 ...

最新文章

  1. java基础小总结(2)
  2. Android在xml中定义Shape
  3. JavaScript 里变量名前面加了大括号代表什么含义
  4. django from组件 实现增加 删除 编辑(推荐用法)
  5. reload端口 tomcat_tomcat上部署网站的三种方式
  6. excel表格打印每页都有表头_这么漂亮的Excel表格,用黑白打印机打印真是可惜了...
  7. Android日志[进阶篇]三-Logcat 命令行工具
  8. kali安装nessus_漏洞扫描工具Nessus指南
  9. freecplus框架-文件操作
  10. mysql自动更新时间的触发器
  11. Java 实现 RSA 非对称加密算法-加解密和签名验签
  12. struts2学到屎挫死-学习笔记(4)
  13. 高并发时代下的设计模式-GO和JAVA的对比
  14. 手机版q群管机器人_手机QQ机器人怎么用,QQ机器人手机版怎么设置
  15. ug打开服务器文件保存不了,UG编程时突然提示保存不了,你该怎么办,看这里...
  16. 【python】函数和模块
  17. weex的组件 web的使用(结合webview模块)
  18. 老哥们 FlexiTimer库怎么用不了呢 ,指点一下小弟
  19. CodeForces - 407C C - Curious Array 高阶差分序列
  20. Windows图标显示异常解决方法。桌面图标异常,开始菜单图标异常,任务栏图标异常。图标缓存位置。

热门文章

  1. Android--耗电优化
  2. 成功解决 ValueError: Not a TBLoader or TBPlugin subclass: <class ‘tensorboard_plugin_wit.wit_plugin_load
  3. 借记贷记、往账来账资金流,及联机异常处理总结
  4. 使用PreTranslateMessage(MSG* pMsg)截获键盘数字键
  5. 初中计算机实践研究计划,《初中信息技术学科学生作品有效评价的实践研究》课题研究计划...
  6. 实习每日总结_20161214
  7. 【Python 数据科学】Numpy和Pandas基础
  8. 三、Solr管理控制台(二)
  9. lcd显示器测试软件,tLCDtest(液晶屏幕测试软件)
  10. Java语言使用注解处理器生成代码——第二部分:注解处理器