C语言中EOF是什么意思?

相信很多朋友在学习C语言过程中,都看到过EOF的字样,但翻过整本C语言的书,也没有看到有这个函数或者关键字的,岂不是感觉很奇怪?难道学的不细有疏漏吗?当然不是!这里笔者告诉您一个技巧,如果您在看代码过程中,看到特殊的字符感觉不是关键字也不是函数,那您首先要想到的就是:这个东西是不是#define或者typedef过的呢?

直接开门见山,比如ACM比赛经常有这样的代码:while(scanf("%d%d")!=EOF)

这玩意啥意思呢?首先scanf你写while里就很奇怪了,初学者表示没见过这么嵌套写的,再加个EOF更离谱了,都让人怀疑这是不是C代码了......

那给大家讲一下,首先这个代码scanf能写while里是因为scanf("%d%d")!=EOF本身是个逻辑判断,也就是真或者假,所以可以作为条件判断写到while里,那么最主要的问题来了,EOF到底啥玩意?

好了,如果您学了C语言中的宏定义就一切真相大白了,您不妨打开我们最常用的stdio.h这个头文件(不知道怎么打开?随便打开一个包含这个头文件的程序,右键即可),然后搜索EOF即可发现答案! 如下:

怎么样?看到了吧,EOF其实就是-1!

也就是说EOF就是个数字,被定义为-1而已!

为什么这样做呢? stdio.h作为一个标准输入输出的头文件,自然会定义很多标准的东西,那么EOF正是因此而生,且听笔者慢慢道来:

在我们进行包括scanf等的输入函数使用时,其实用户在cmd中的输入实际是存放于缓冲区当中,当用户键入回车那一瞬间,之前输入的数据才会被存进去,而这里无论是单个字符还是字符串,我们都知道scanf的返回值呢是表示成功接受到的对象的个数,那这里如果遇到特殊情况,比如缓冲区文件流满等问题,那么scanf将如何处理呢?答案是返回-1 ! 这里不光是scanf,返回值为个数的函数,遇到文件流满大多都会返回-1,所以这个-1用的比较多,那么stdio.h就索性专门定义一个宏来表示,取End Of File(文件末尾的意思)的前三个字母即组成EOF,所以也就有了 #define EOF (-1) 这样的话!

那么,现在看懂了吗?

C语言(clang.cc)研究中心

原文发布于微信公众号 - 编程范(dotcpp)

原文发表时间:2015-05-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏无所事事者爱嘲笑

vue 格式化银行卡(信用卡)每4位一个符号隔断

查看了很多大公司网站的银行卡输入,发现还有有很多缺陷的: 有的是在中间删除,光标会跳到最后; 有的是能删除掉中间隔断符的; 等等,逻辑感觉比较混乱,或者是...

3012
来自专栏idealclover的填坑日常

C++ cin清理缓冲区

C++在用cin做输入的时候,尤其是需要输入int型值的时候,往往需要做验证与处理。而对于异常值,则需要先清理缓冲区,再准备下一次输入。

1182
来自专栏学习力

《Java从入门到放弃》框架入门篇:Struts2的常用验证方式

2038
来自专栏AndroidTv

分享两个提高效率的AndroidStudio小技巧

这次分享两个 Android Studio 的小技巧,能够有效提高效率和减少犯错,尤其是在团队协作开发中。

41713
来自专栏Android先生

写给小白的android基础面试笔试题(二)

答:这道题呢不管是在笔试中也好面试中也好,会被经常拿来问,因为这里面涉及到的知识点甚多,这里你就要回答什么是Handler机制,有何作用,然后面试官肯定还会问,...

2223
来自专栏ThoughtWorks

TW洞见 | 李光磊:JavaScript语言中五种消除分支的方法

最近开始使用JavaScript。回顾了一下这几天的代码,发现圈复杂度为1。30几个函数40多行,超过两行的函数都很少 (当然那种当做对象来用的函数除外,只说实...

3416
来自专栏惨绿少年

Shell编程基础篇-上

1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层...

2000
来自专栏程序员互动联盟

【编程基础第十三讲】代码如何写才最漂亮第二篇

存在问题: 好多小伙伴对编码的格式作用模糊,以为只要完成功能就行,其实这种观点是错误的,一定要重视代码规范,不然你哭的地都找不到。 如何实施: 良好的代码开发习...

2568
来自专栏java一日一条

有效处理Java异常的三个原则,你知道吗?

在有效使用异常的情况下,异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息回答了“为什么“会抛出,如果你的异常没有回答以上全部问题,那么可能...

1501
来自专栏佳爷的后花媛

h文件和c文件的区别include本身只是一个简单的文件包含预处理命令,即为把include的后面文件放到这条命令这里,除此之外,没有其它的用处(至少我也样认为).

其实在H文件里写函数也无所谓,只是不符合习惯而已。只要按照以上的格式写,一个H文件添加多少次都无所谓,

1962

扫码关注云+社区