feof()函数以及EOF
c 中的feof()函数,用来检测当前文件流上的文件结束标志,判断是否文件的尾部。
函数int feof(FILE *fp) 检测到文件结束符则返回一个非0值,否则返回0.
Note:当文件内部的位置指针指向文件结束符时,并不会立即设置FILE结构中的文件结束标识,只有再执行一次读操作,才会设置文件结束标志,再调用feof()才会返回一个非0值.
feof.c
#include<stdio.h>
#include<stdlib.h>int main()
{FILE *fp;char keyword[10];int value;int times=1;fp = fopen("dicts", "r"); //打开dicts文本文件fscanf(fp, "%s%d", keyword, &value);printf("Read times: %d\n", times);while(!feof(fp)){printf("%s--%d\n", keyword, value);fscanf(fp, "%s%d", keyword, &value);times++;printf("Read times: %d\n", times);}
}
dicts 文本文件
while 1
for 2
if 3
string 4
文件只有四行,但是在读第五次的时候,才退出while,因为在第四次读取的时候虽然已经到了文件尾部,但没有立即设置FILE结构中的文件结束标识,因此第四次读取完之后,feof(fp)仍然返回的0。到第五次读取完之后,feof(fp)返回的才是一个非0值。
c中的EOF End of File 在表示操作系统中数据源中没有更多的数据可读取。
EOF在c中实际上是一个宏定义,值为-1,可以用来判断文本文件的结束,但是不能用来判断二进制文件的结束。因为文本文件中的所有字符都是使用ASCII码值存放的,范围是0-127,不可能出现-1,当读入的字符值为-1时就说明读到了文件尾部。
EOF.c
#include<stdio.h>
#include<stdlib.h>int main()
{FILE *fp;char temp;fp = fopen("dicts", "r");printf("%d\n", EOF);while((temp=fgetc(fp))!=EOF)printf("%c", temp);
}
EOF 标志在标准输入中由ctrl+d(liunx下)或者ctrl+z(win下)产生
EOF1.c
#include<stdio.h>
#include<stdlib.h>int main()
{ char temp;while((temp=getchar())!=EOF){ printf("%c", temp);}
}
标准的输入都有缓冲区,来存储数据
当缓冲区中有数据:按下ctrl+d输出缓冲区的内容,再次按下ctrl+d才表示EOF,才会结束输入
当缓冲区没有数据:按下ctrl+d就代表EOF
回车也表示输出缓冲区的内容,但是回车’\n’也是一个字符,会产生一个ASCII码值放到缓冲区中,但是使用ctrl+d或者ctrl+z来输出缓冲区内容时,并不会产生一个字符,也不会放到缓冲区中。
非阻塞式和阻塞式
非阻塞式:按下结束标识符就立即响应
阻塞式:按下结束标识符不会响应,只有当按下回车的时候才会对之前的结束标识符进行检测。
在linux下EOF标志符(ctrl+d)的检测时非阻塞式。而在windows下EOF标识符(ctrl+z)的检测是阻塞式。
因此在win下如果在输入ctrl+z之后又输入了数据之后才回车,后面的数据并不会输入。
如果想要输入ctrl+d,先按ctrl+v然后可以输入ctrl+d,同样如果想要输入ctrl+v,只需要按两下ctrl+v 即可。
立即回显与延迟回显
输入字符的立即回显: 是非缓冲的(unbuffered)或直接输入的一个实例,表示所键入的字符对正在等待的程序变为立即可用。
输入字符的延迟回显: 是缓冲(buffer)输入的一个实例,所键入的字符被收集并存储在缓冲区中,当按下回车之后所键入的字符块对程序变为可用。
在linux终端下输入命令都是回显的非缓冲输入也就是立即回显,键入的字符会在屏幕上显示。但是我们在终端输入密码时都是不回显非缓冲输入,键入的字符不会显示在屏幕上。
缓冲分为两类:
完全缓冲(fully buffered):当缓冲区满时被清空。
行缓冲(line-buffered):遇到一个换行符时将被清空缓冲区。
feof()函数以及EOF相关推荐
- 【C标准库】详解feof函数与EOF
创作不易,多多支持! ‾ \underline{创作不易,多多支持! } 创作不易,多多支持! 再说此函数之前,先来说一下EOF是什么 EOF,为End Of File的缩写,通常在文本的最后存在此 ...
- C语言再学习 -- EOF、feof函数、ferror函数
EOF详解 EOF是end of file的缩写,表示"文字流"(stream)的结尾.这里的"文字流",可以是文件(file),也可以是标准输入(stdin) ...
- 文件结束判定与feof函数
文件结束判定与feof函数 目录 文件结束判定: 方法1 :fget()函数返回EOF 方法2 :fgets()返回NULL ...
- C语言之EOF、feof函数、ferror函数
本文为转载文章,原文:C语言再学习 -- EOF.feof函数.ferror函数 EOF详解 1.定义: EOF是end of file的缩写,表示"文字流"(stream)的结尾 ...
- PHP使用feof()函数读文件的方法
这篇文章主要介绍了PHP使用feof()函数读文件的方法,以实例形式对比了正确与错误的用法,阐明了feof()函数的使用技巧,需要的朋友可以参考下 本文实例讲述了PHP使用feof()函数读文件的方法 ...
- feof()函数的文件操作
feof()函数在文件操作时,用于判断文件是否结束.如果文件结束,则返回非0值,否则返回0. 对于文件来说,无论是空文件,还是存有信息的文件.文档的结尾都有一个隐藏字符"EOF", ...
- C语言中的feof函数
函数名 feof 功 能 检测流上的文件结束符 用 法 int feof(FILE *stream); 程序例 #include <stdio.h> int main(void) { FI ...
- feof函数重读问题
feof函数重读问题 fgets读到文件最后一行的时候(返回不是NULL) ,feof测试为假,再fgets一次(返回为NULL),再feof测试为真. feof是通过判断read返回错误时,才判断流 ...
- feof函数,fscanf函数,strtok函数等遇到的小疑惑解决办法
feof函数,fscanf函数,strtok函数等遇到的小疑惑解决办法 近几天我等几个小菜鸟要做一个快译通软件,简单实现根据英语查汉语,本人负责将dict.txt词库中的单词调入内存哈希表 ...
最新文章
- 注解实现原理学习之how does @Category work
- 同事说他的应用起不来了,因为我的代码里面多了一个空格!
- 适合初学者的sql_适用于初学者SQL多重连接示例
- 大话设计模式-原型模式的浅复制与深复制
- mysql 函数 数字转字串_mysql中字符串和数字的互转函数
- mac以管理员身份运行文件_使用windows升级ios/iPadOS 13 beta版本,无需Mac和开发者账户...
- oracle 数据库 swap,Oracle swap 100%案例分析
- 团队博客-随笔:团队展示 (科利尔拉弗队)
- 春暖花开php,春暖花开的朋友圈说说 开心的说说短句
- navicat for mysql 破解版 中文免费
- JavaScript与浏览器
- word回车后间距太大_word 里字体变大后再回车,两行间距太大怎么办
- 英语语法快速入门1--简单句(附思维导图)
- wintogo取消屏蔽本地磁盘
- node.js毕业设计安卓在线民宿预定app(程序+APP+LW)
- 音频文件按照正常语句,断句拆分的处理方法
- 小程序基础版本库与微信版本关系
- Java垃圾回收的细节
- ArcGIS水文分析实战教程(8)水库库容计算
- python实现多句话翻译多语种(调翻译接口)