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相关推荐

  1. 【C标准库】详解feof函数与EOF

    创作不易,多多支持! ‾ \underline{创作不易,多多支持! } 创作不易,多多支持!​ 再说此函数之前,先来说一下EOF是什么 EOF,为End Of File的缩写,通常在文本的最后存在此 ...

  2. C语言再学习 -- EOF、feof函数、ferror函数

    EOF详解 EOF是end of file的缩写,表示"文字流"(stream)的结尾.这里的"文字流",可以是文件(file),也可以是标准输入(stdin) ...

  3. 文件结束判定与feof函数

    文件结束判定与feof函数 目录 文件结束判定:                    方法1 :fget()函数返回EOF                    方法2 :fgets()返回NULL ...

  4. C语言之EOF、feof函数、ferror函数

    本文为转载文章,原文:C语言再学习 -- EOF.feof函数.ferror函数 EOF详解 1.定义: EOF是end of file的缩写,表示"文字流"(stream)的结尾 ...

  5. PHP使用feof()函数读文件的方法

    这篇文章主要介绍了PHP使用feof()函数读文件的方法,以实例形式对比了正确与错误的用法,阐明了feof()函数的使用技巧,需要的朋友可以参考下 本文实例讲述了PHP使用feof()函数读文件的方法 ...

  6. feof()函数的文件操作

    feof()函数在文件操作时,用于判断文件是否结束.如果文件结束,则返回非0值,否则返回0. 对于文件来说,无论是空文件,还是存有信息的文件.文档的结尾都有一个隐藏字符"EOF", ...

  7. C语言中的feof函数

    函数名 feof 功 能 检测流上的文件结束符 用 法 int feof(FILE *stream); 程序例 #include <stdio.h> int main(void) { FI ...

  8. feof函数重读问题

    feof函数重读问题 fgets读到文件最后一行的时候(返回不是NULL) ,feof测试为假,再fgets一次(返回为NULL),再feof测试为真. feof是通过判断read返回错误时,才判断流 ...

  9. feof函数,fscanf函数,strtok函数等遇到的小疑惑解决办法

    feof函数,fscanf函数,strtok函数等遇到的小疑惑解决办法       近几天我等几个小菜鸟要做一个快译通软件,简单实现根据英语查汉语,本人负责将dict.txt词库中的单词调入内存哈希表 ...

最新文章

  1. 注解实现原理学习之how does @Category work
  2. 同事说他的应用起不来了,因为我的代码里面多了一个空格!
  3. 适合初学者的sql_适用于初学者SQL多重连接示例
  4. 大话设计模式-原型模式的浅复制与深复制
  5. mysql 函数 数字转字串_mysql中字符串和数字的互转函数
  6. mac以管理员身份运行文件_使用windows升级ios/iPadOS 13 beta版本,无需Mac和开发者账户...
  7. oracle 数据库 swap,Oracle swap 100%案例分析
  8. 团队博客-随笔:团队展示 (科利尔拉弗队)
  9. 春暖花开php,春暖花开的朋友圈说说 开心的说说短句
  10. navicat for mysql 破解版 中文免费
  11. JavaScript与浏览器
  12. word回车后间距太大_word 里字体变大后再回车,两行间距太大怎么办
  13. 英语语法快速入门1--简单句(附思维导图)
  14. wintogo取消屏蔽本地磁盘
  15. node.js毕业设计安卓在线民宿预定app(程序+APP+LW)
  16. 音频文件按照正常语句,断句拆分的处理方法
  17. 小程序基础版本库与微信版本关系
  18. Java垃圾回收的细节
  19. ArcGIS水文分析实战教程(8)水库库容计算
  20. python实现多句话翻译多语种(调翻译接口)

热门文章

  1. 麦塔金,告诉大家图形用户界面是个人用户电脑操作系统不可分割的一部分,重新定义了操作系统...
  2. Excel技能之8种查找,乍看感觉有点懵
  3. leetcode: 三角形的组成个数
  4. 浅析React Hooks原理
  5. python火灾检测
  6. 掌握了2-3-4树也就掌握了红黑树,不信进来看看,建议收藏!
  7. HTTP 401 错误 - 未授权 终极解决办法
  8. MyBatis基于XML的详细使用——缓存
  9. 乐视视频人力:外界眼中的乐视和员工眼中的乐视,大不一样
  10. 双非硕士 | 0实习 | 1个月上岸深信服售前产品经理提前批