专栏首页C语言及其他语言【编程经验】C语言中EOF是什么意思

【编程经验】C语言中EOF是什么意思

C语言中EOF的意思

今天跟大家说道说道这个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) 这样的话!

今天的分享到这里就结束了,怎么样,有收获没?没看爽的小伙伴可以点击阅读全文去官网看呦!

题外话:还有三个幸运的活动参与者没有发给我收件信息诶,如果看到这的话请尽快把收件信息发过来,万分感谢您的配合!!

本文分享自微信公众号 - 编程范(dotcpp),作者:行者还小

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-02-11

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C语言中EOF是什么意思?

    相信很多朋友在学习C语言过程中,都看到过EOF的字样,但翻过整本C语言的书,也没有看到有这个函数或者关键字的,岂不是感觉很奇怪?难道学的不细有疏漏吗?当然不是!...

    编程范 源代码公司
  • 【每日一题】[蓝桥杯][算法提高VIP]任意年月日历输出

    这是一个蓝桥杯的真题哈,大家可以试试锻炼锻炼: 题目描述 已知2007年1月1日为星期一。 设计一函数按照下述格式打印2007年以后(含)某年某月的日历,20...

    编程范 源代码公司
  • [编程经验]C语言free释放内存后为什么指针里的值不变?竟然还可以输出?

    今天你家范儿给大家带来一个的东西——关于C语言为什么释放指针后,指向这块内存的指针的值不变问题的编程经验!!行了,咱们话不多少,直接上主食。 ...

    编程范 源代码公司
  • C语言中EOF是什么意思?

    相信很多朋友在学习C语言过程中,都看到过EOF的字样,但翻过整本C语言的书,也没有看到有这个函数或者关键字的,岂不是感觉很奇怪?难道学的不细有疏漏吗?当然不是!...

    编程范 源代码公司
  • OJ刷题-while(scanf("%d",&n)!=EOF)

            “测试输入包含若干测试实例。当N为0时,输入结束,该实例不被处理。”这句话 是最早我对OJ的印象 以前也没见过这种输入要求, 做第一道题的时候就...

    Flaneur
  • 从SAP最佳业务实践看企业管理(84)-PP-149按库存生产-重复制造

    PP149按库存生产-重复制造 目的: 通常在生产流程符合下列标准时使用重复制造:在较长期间生产相同或类似的产品。所生产的产品不在单独定义的批中制造。而是在特定...

    SAP最佳业务实践
  • day31 - socket使用,基于 UDP

    首先运行server端,再运行client_1 和 client_2,一次实现一个多人聊天的简单的小功能,基于 udp 协议

    少年包青菜
  • ICLR 2019 |一文尽览 ICLR 2019 Facebook & Google 入选论文

    AI 科技评论按,近日,ICLR 2019 论文入选结果公布,各大公司和研究院纷纷在博客上公布了今年入选的论文。

    AI科技评论
  • JavaScript replace() 方法 及正则表达式

    replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

    山河木马
  • 微信公众号可通过现金红包接口发放微信支付现金红包(附开发教程)

      农历新年将至,支付宝红包打了一仗,微信在朋友圈屏蔽了它的分享,但单防守还不行,进攻才是最好的防守。昨日,微信支付现金红包接口正式开放,只需开通微信支付,即可...

    ytkah

扫码关注云+社区

领取腾讯云代金券