c语言 文件读取z整行操作,C语言文件操作函数之ferror feof clearerr
这些函数都是和文件读写时发生错误有关,下面一一分析:
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相关推荐
- shell中for循环,读取一整行
shell中for循环,读取一整行 shell中for循环的默认分隔符是:空格.tab.\n 需求是只以\n作为分隔符 shell for循环以\n作为分割符,方式一: 文件aa.sh [html] ...
- C++ fscanf 读取一整行
转自:https://www.cnblogs.com/luyi07/p/9527692.html scanf, fscanf很相似,都是从流中读取输入,然后赋值给变量 int scanf(const ...
- 输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据
C程序,功能如题,代码如下: /* 功能:输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据 基本思路:产生一个长度为n的二维数组,将它作为一个循环队列来看待 */ #include ...
- EasyExcel实现文件读取、导出、上传、下载操作
一.EasyExcel简介 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度 ...
- 多个Excel文件查找显示整行
本文介绍的工具可以按一个关键字.多个关键字或汉字描述的条件进行查找,展示出整行信息,支持提取本行.上几行.下几行的信息到新的Excel文件中.同时包含指定行的提取.指定列的提取工具. 工具地址:www ...
- C语言 输入是一整行的字符串
输入是一整行的字符串的 C语法: char buf[20]; gets(buf); C++语法: 如果用string buf;来保存: getline( cin , buf ); 如果用char bu ...
- 黑马程序员—文件读取路径及行读取的方式,今晚总算有点小懂
ASP.Net+Android+IO开发S..Net培训.期待与您交流 以前文件读取总是一知半解,每次使用时都是这错拿错,代码每次写到一半就要去翻资料.今天自己来好好总结一下.第一个不明白的方就是文件 ...
- linux用分割的csv文件读取,在Linux中将制表符分隔的文件转换为CSV的最快方法
在Linux中将制表符分隔的文件转换为CSV的最快方法 我有一个制表符分隔的文件,其中包含超过2亿行. 在Linux中将其转换为CSV文件的最快方法是什么? 该文件的确包含多行标题信息,我需要将其删除 ...
- c语言fread读取错误,【求助】C语言fread读取二进制文件时,读取结果全都是零
C语言fread读取二进制文件时,读取结果全都是零,编译运行都没问题,但是就是结果显示不对,猜想可能有几个原因: 1. 大小端没处理好,设置了程序判断机器为little endian,但是,身为小白的 ...
最新文章
- java基础小总结(2)
- Android在xml中定义Shape
- JavaScript 里变量名前面加了大括号代表什么含义
- django from组件 实现增加 删除 编辑(推荐用法)
- reload端口 tomcat_tomcat上部署网站的三种方式
- excel表格打印每页都有表头_这么漂亮的Excel表格,用黑白打印机打印真是可惜了...
- Android日志[进阶篇]三-Logcat 命令行工具
- kali安装nessus_漏洞扫描工具Nessus指南
- freecplus框架-文件操作
- mysql自动更新时间的触发器
- Java 实现 RSA 非对称加密算法-加解密和签名验签
- struts2学到屎挫死-学习笔记(4)
- 高并发时代下的设计模式-GO和JAVA的对比
- 手机版q群管机器人_手机QQ机器人怎么用,QQ机器人手机版怎么设置
- ug打开服务器文件保存不了,UG编程时突然提示保存不了,你该怎么办,看这里...
- 【python】函数和模块
- weex的组件 web的使用(结合webview模块)
- 老哥们 FlexiTimer库怎么用不了呢 ,指点一下小弟
- CodeForces - 407C C - Curious Array 高阶差分序列
- Windows图标显示异常解决方法。桌面图标异常,开始菜单图标异常,任务栏图标异常。图标缓存位置。
热门文章
- Android--耗电优化
- 成功解决 ValueError: Not a TBLoader or TBPlugin subclass: <class ‘tensorboard_plugin_wit.wit_plugin_load
- 借记贷记、往账来账资金流,及联机异常处理总结
- 使用PreTranslateMessage(MSG* pMsg)截获键盘数字键
- 初中计算机实践研究计划,《初中信息技术学科学生作品有效评价的实践研究》课题研究计划...
- 实习每日总结_20161214
- 【Python 数据科学】Numpy和Pandas基础
- 三、Solr管理控制台(二)
- lcd显示器测试软件,tLCDtest(液晶屏幕测试软件)
- Java语言使用注解处理器生成代码——第二部分:注解处理器