c语言中关于文件读取结束的判定,以及feof函数的理解
判断一个文件的读取是否结束,很多人,会想到用feof函数来判定,的确需要用到这个函数,但是仅仅靠这个函数是不够的。
错误用法:
#include<stdio.h>int main()
{FILE* pf = fopen("2128.txt","r");if(pf == NULL){perror("pf");}if(feof(pf)){printf("end of file");}return 0;
}
运行结果:
实际上文件无内容,按理应该输出 end of file;
先看函数原型:
返回值:(搞清楚他的返回值含义就知道怎么使用了)
(读取的)当前位置不是文件末尾(可以理解为EOF)的时候返回0;其实就算读取到了EOF也是返回0;
当要首次尝试读取文件末尾(EOF)后面的内容的时候返回非零值;(所以要想利用feof函数判定文件读取结束的前提是已经读取到了EOF,我们可以理解为只有feof函数才能读取EOF后面的内容,所以上面那个错误的用法中,读的是EOF,返回值为0,并不是EOF后面的内容)
这里解释一下文件结束符EOF,它只是一个stdio.h里面定义的一个标识符常量-1,并不是真正存在于文件中。比如一个空文件(无任何字符),我们读取一个字符,系统会默认给读取的内容赋值EOF(-1)。
但是有些文件读取函数读取失败的时候也会返回EOF;比如文本文件字符读取函数fgetc,二进制文件读取函数fread,它们读取失败的时候也返回EOF,因此,我们读取到了EOF后,需要判断是真正读到了文件末尾(即文件读取结束),还是读取函数发生了错误而返回的EOF;
文本文件读取结束的判定:
#include<stdio.h>
int main()
{//char a[20];int c = 0;FILE* pf = fopen("2128.txt","r");if( pf == NULL){perror("pf");return 0;}while((c = fgetc(pf))!=EOF)//读取到了EOF跳出循环{putchar(c);}
//判定是否是fgetc函数读取出错,出错返回非零值; if(ferror(pf))perror("pf");
//fgetc函数没出错,正常读取到了EOF,这时才能用feof定论else if(feof(pf))printf("end of file\n");fclose(pf);pf = NULL;return 0;
}
运行结果:
注意while循环里面的条件(c = fgetc(pf))!=EOF,读到EOF后跳出循环,只不过没有打印,此时可以理解光标已经指向了EOF后面的内容,所以最后面调用feof函数的时候,满足其返回值里面的说明:即尝试读取EOF后面的内容的时候返回非零值,因此我们先用ferror函数过滤掉fetc函数读取失败返回EOF的情况,再用feof函数来判定文件读取结束。(fetc函数读取发生错误ferror返回非零值。)
二进制文件读取结束的判定也是相同的道理,这里不再赘述。
c语言中关于文件读取结束的判定,以及feof函数的理解相关推荐
- C语言文件操作(四) —— 文件读取结束的判定(feof、ferror)
目录 1.feof.ferror 函数返回值 (1) feof 函数 (2) ferror 函数 2.feof.ferror 函数函数使用 fgetc.fgets的返回值说明都有提到一 ...
- 文件结束的判定与feof函数
文件结束的判断: 1.fget()读取结束后返回EOF. #include<stdio.h> #include<stdlib.h> int main() {FILE* fp = ...
- c语言中以追加只写方式打开文本文件,C语言中打开文件读取,写入的操作
#include#includeint main(){ //打开文件并以读取的方式 FILE* file = fopen("E://1.txt","rt"); ...
- 【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识
- 【C语言复习】C语言中的文件操作
C语言中的文件操作 写在前面 文件操作 什么是文件 文件的分类 文件名 文件的操作 文件指针 文件的打开和关闭 文件的顺序读写 文件的随机读写 fseek ftell rewind feof 写在前面 ...
- c语言把一个字符从指定文件中读取的函数,C语言中对文件最基本的读取和写入函数...
C语言中对文件最基本的读取和写入函数 C语言read()函数:读文件函数(由已打开的文件读取数据)头文件: #include 定义函数: ssize_t read(int fd, void * buf ...
- 用c语言对文件的写入和保存,C++_C语言中对文件最基本的读取和写入函数,C语言read()函数:读文件函数( - phpStudy...
C语言中对文件最基本的读取和写入函数 C语言read()函数:读文件函数(由已打开的文件读取数据)头文件: #include 定义函数: ssize_t read(int fd, void * buf ...
- C语言文件读取结束判断正确方式
前言 对于在文件操作时,怎么样判断文件是否结束,以feof来判断文件读取结束是否正确? 一.MSDN对feof的介绍? 对与返回值的描述是: feof函数在第一次读取操作后返回一个非零值,该操作试图读 ...
- verilog从txt中读取_verilog语言中的文件读写
verilog语言中的文件读写 原创: IC控 IC控 2月22日 在Verilog语言中,对文件的读写一般用在编写testbench,而用到的系统函数大概有以下几种,首先是$fopen,然后是对文件 ...
最新文章
- Layui + bootstrap + servlet 的房屋出租管理系统
- mysql保留2位小数字段如何设置 浮点数
- 搜索专题: HDU1428漫步校园
- java 注册回调_java 实现回调代码实例
- [MATLAB调试笔记]Possion方程求网格点电场强度
- oracle存储过程无效字符_Oracle存储过程基础+ 错误代码
- jooq和jdbc_将jOOQ与JDBC比较
- leetcode —— 1290. 二进制链表转整数
- java stack 类 效率_Java中ArrayList、LinkedList、Vector、Stack的比较
- 3、CommonChunkPlugin提取公共js-以提取一个jquery为例
- AJAX Toolkits -- DropShadow
- pe卸载win10更新补丁_新图标+新功能!win10凌晨更新补丁
- 【产品工具使用】黑群晖史上最强安装教程
- 生信技能树 电脑配置linux,生信技能树----Linux练习题答案
- html是乱码怎么解决,如何解决html乱码问题
- MATLAB入门学习笔记8
- 微信小程序布局 左右结构简单例子
- 中国首台云电脑全面解析——天霆云计算董事长谈天霆专访
- ShuZu数组中插入一个数
- 关于计算机英语手抄报全国一等奖,获奖手抄报图片
热门文章
- python 凸优化
- 服务器系统取消登录密码,服务器取消密码
- lightdb对oracle的nvl/nvl2函数的支持
- 高频、高灵敏度1.8-1.9mv/GS、供电耐压8V 线性霍尔 MH481
- 爬虫(8)-Scrapy爬取微博用户粉丝,关注和微博内容
- 【kubernetes】从僵尸进程探讨容器的多进程管理
- 银联支付 返回商户 Nignx post请求405
- 华东师范大学计算机学院周俊,软件工程学院
- Android Activity旋转屏幕横屏实现全屏方法
- 跟着iMeta学作图 | 山峦图展示微生物丰度随盐度增加的动态变化