
文章插图
fp的flag就是一个标志位
在判断feof的时候只是单纯的返回这个标志位的值,并不会出现读操作
即
int feof(FILE fp){ return fp->flag;}而fp->flag赋值是在其他读操作时赋值的, 包括fgetc, fread, fscanf等等
所以 只要代码写的正确, 是不会造成多读的
多读一次 一般都是代码写的不对
比如
while(!feof(fp))
{
putchar(fgetc(fp));
}这样就会导致多读一次因为, 最后一次 fgetc出错, 才赋值flag为1, 这一次读的结果就是无效的
可是一样执行了putchar, 就导致了多一次
如果改成
while(1)
{
int c=fgetc(fp);
if(feof(fp)) break;
putchar(c);
}就没问题了
首先,feof()是文件结束检测函数,如果没有结束,返回值是0,结束了是1
由于feof(fp)返回0才是没有结束,所以通常写成while(!feof(fp)),这样使得没有结束时进行循环
欢迎向我提问,我乐意回答
fp为文件句柄 , feof为判断是否读到文件尾,! 为非while(!feof(fp))就是当条件为不是文件尾时均执行后续代码 。
在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名 , 并选一个到该文件的路径来打开文件 。
该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据 。要从文件中读取一块数据,应用程序需要调用函数ReadFile , 并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统 。当完成任务后,再通过调用系统函数来关闭该文件 。
扩展资料文件句柄特点
一个句柄就是你给一个文件,设备,套接字(socket)或管道的一个名字,隐藏某些缓存等的复杂性 。
在内部, 句柄类似C++语言的流(streams,或BASIC中的I/O通道)句柄从不同的地方输入和输出给不同的地方都较容易 。使Perl成为好语言的一个原因是它能和多个文件通讯并一次处理他们 。对外部对象友好的符号名字是一个好语言的一个组成部分 。
其他使Perl是一个好语言的是:它是8位的,是可嵌入的 , 能通过扩展模式在Perl中嵌入其他程序 。是简明的,网络上容易使用 。环境上是清楚的,容易对话 。语言本身不是如此严格的结构,以至于不能超出问题,又回到TMTOWTDI 。
参考资料来源:百度百科-文件句柄
【c语言 feof多读一次】
- 为啥这种塑料袋不建议装肉食
- 违章停车扣分吗罚多少钱3分200
- 南韩丝面料容易起球吗 南韩丝面料的优缺点
- 管道如何和法兰垂直连接 管道法兰的一些基本选择是什么
- 自制西梅干西梅汁
- 食在广州味在顺德还是味在潮汕 广东化州十大特色美食
- 口碑两极化的影视剧 星球大战的外传有哪些
- 10公里和10千米是有很大区别
- 负面情绪多的人怎么调整 如何远离每天都是负面情绪的人
- 《水调歌头·明月几时有》的全诗
