EOF,为End Of File的缩写,通常在文本的最后存在此字符表示资料结束。
在微软的DOS和Windows中,读取数据时终端不会产生EOF。此时,应用程序知道数据源是一个终端(或者其它“字符设备”),并将一个已知的保留的字符或序列解释为文件结束的指明;最普遍地说,它是ASCII码中的替换字符(Control-Z,代码26)。
在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。
档案存取或其它 I/O 功能可能传回等于象征符号值 (巨集) EOF 指示档案结束的情形发生。实际上 EOF 的值通常为 -1,但它依系统有所不同。巨集 EOF会在编译原始码前展开实际值给预处理器。
C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功。
例如:

#include <stdio.h>
int main(){int n;
while(scanf("%d",&n) != EOF){ }return 0;
}

当上面的程序运行时,如果不加" != EOF",那么这个程序就是个死循环,会一直运行下去;加上" != EOF"后该程序就不是死循环了,如果在终端不进行输入该程序会自动结束(while的意思就是说当当前输入缓存还有东西时就一直读取,直到输入缓存中的内容为空时停止)。
在这"scanf("%d",&n) != EOF"相当于"scanf("%d",&n) != EOF",或"~scanf("%d",&n)",或"scanf("%d",&n) == 1 " 。scanf的返回值由后面的参数决定

有小伙伴会问到上面那个程序怎么结束呢?
要注意的是:在终端(黑框)中手动输入时,系统并不知道什么时候到达了所谓的“文件末尾”,因此需要用<Ctrl + z>组合键然后按 Enter 键的方式来告诉系统已经到了EOF,这样系统才会结束while.

scanf("%d%d", &a, &b);
如果a和b都被成功读入,那么scanf的返回值就是2;如果只有a被成功读入,返回值为1;如果a和b都未被成功读入,返回值为0;如果遇到错误或遇到end of file,返回值为EOF,且返回值为int型。

但是在C++中不存在这种用法,但相同作用的有while((cin >> a) != 0):
以前不理解在while里面用cin >> a;是什么意思,cin是C++的输入流对象,">>"是重载的运算符,cin>>的返回值是cin对象。用这个当条件的话,通过检测其流的状态来判断结束;
(1)若流是有效的,即流未遇到错误,那么检测成功;
(2)若遇到文件结束符,或遇到一个无效的输入时(例如本题输入的值不是一个整数),istream对象的状态会变为无效,条件就为假;读取失败的时候,就不能继续读取了,那么读取操作结束,while(cin>>a)就返回false,跳出循环!
C++中的while (cin>>n,n):
他的作用是:输入一个数,这数不为0时进入循环,为0时跳出循环。

采纳:“https://www.cnblogs.com/tgycoder/p/4958519.html”

输入(cin)缓冲是行缓冲。当从键盘上输入一串字符并按回车后,这些字符会首先被送到输入缓冲区中存储。每当按下回车键后,cin 就会检测输入缓冲区中是否有了可读的数据,这种情况下cin对键盘上是否有作为流结束标志CTRL+Z或者CTRL+D,其检查的方式有两种:阻塞式以及非阻塞式。

阻塞式检查方式指的是只有在回车键按下之后才对此前是否有 Ctrl+Z 组合键按下进行检查,非阻塞式样指的是按下 Ctrl+D 之后立即响应的方式。如果在按 Ctrl+D 之前已经从键盘输入了字符,则 Ctrl+D的作用就相当于回车,即把这些字符送到输入缓冲区供读取使用,此时Ctrl+D不再起流结束符的作用。如果按 Ctrl+D 之前没有任何键盘输入,则 Ctrl+D 就是流结束的信号。
阻塞式的方式有一个特点:只有按下回车之后才有可能检测在此之前是否有Ctrl+Z按下。

参考:百度百科。

EOF的意义及用法(while(scanf(%d,n) != EOF))相关推荐

  1. EOF的意义及用法(while(scanf(“%d“,n) != EOF))

    EOF为结束标志,当缓冲里没有东西或者遇到ctrl+z就结束 每次读取长度及类型%d那指定了 参考文章:EOF的意义及用法(while(scanf("%d",&n) != ...

  2. EOF的用法(while(scanf(“%d“,n) != EOF))和~取反的用法(while(~scanf(“%d“,n)))

    文章目录 多组输入输出 输入固定数据量 EOF的用法 ~取反的用法 另一种写法,只针对特定标识符结束 扩展 多组输入输出 我们在做题中会有出现以下的情况, 情况一:题中要求在输入数据第一行给出固定数据 ...

  3. C语言——EOF的用法——while(scanf(“%d“,num)!=EOF)

    简介: EOF是一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取.资料源通常称为档案或串流.通常在文本的最后存在此字符表示资料结束.. 概念: 在C语言中,或更 ...

  4. while(scanf(%d,n)!=EOF) / while(cinn)终止问题

    问题的发现:(想要看干货可以直接跳过这段) 我最近刚了解到关于栈的用法,于是按照参考书寻找代码,并把它敲到电脑上.编译运行代码后发现无法终止,在网上查找各种资料,总结如下. 因为我的电脑是Window ...

  5. 【转】Hibernate的Generator属性有7种class,本文简略描述了这7种class的意义和用法。...

    转自:http://hi.baidu.com/zhang_zhu_1/item/5cfcf1a98b86e88a1410733b [转]Hibernate的Generator属性有7种class,本文 ...

  6. c语言static. volatile,嵌入式系统C语言重点语法const、volatile、static、堆栈等的意义及用法...

    原标题:嵌入式系统C语言重点语法const.volatile.static.堆栈等的意义及用法 在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场. 要点:堆, ...

  7. duilib各种布局的作用,相对布局与绝对布局的的意义与用法

    duilib各种布局的作用,相对布局与绝对布局的的意义与用法 原文  http://blog.csdn.net/zhuhongshu/article/details/38531447 主题 Duili ...

  8. 【心得】Ctrl+Z、\n、\0、eof的区别和用法

    从scanf谈起: 一:scanf的返回值:读入的域的个数 int scanf( const char *format [, argument]... ); int _scanf_l( const c ...

  9. 计算机网络中tx和fx,100Base-TX/T4/FX以太网意义及用法

    100Base-TX/T4/FX以太网意义及用法 活络以太网如今拟定的三种有关传输介质的规范之一,一种是100BASE-TX,别的两种是100BASE-T4.100BASE-FX.咱们将"1 ...

最新文章

  1. MPB:中科院城环所杨军组-​​​基于DNA宏条形码的水体浮游细菌群落测序建库方法...
  2. [转]VSTO Office二次开发RibbonX代码结构
  3. Java数据结构与算法:红黑树
  4. Solr5.3.1通过copyField设置多个field(字段)同时检索
  5. 用SAP BSP应用实现图片灰度效果
  6. Spark Yarn Client模式spark.driver.host导致 Cannot assign requested address: Service ‘sparkDriver‘ failed
  7. 代理模式(Proxy)--静态代理
  8. 在EVE虚拟仿真环境里面安装Juniper防火墙,并通过Web做配置
  9. 移动应用设计领域中最拔尖的15大应用
  10. ssh 远程连接、上传下载命令
  11. 数域、有限域(伽罗瓦域)
  12. PHP7函数大全(4553个函数)
  13. xhEditor富文本编辑器的使用说明
  14. 链游:不要只争朝夕,要寄望百年
  15. 基于VaR模型与CAPM模型的个股日收益率分析报告——以宁德时代(300750)为例
  16. 什么是数据科学家与数据科学
  17. 学习型组织的思维方式:保持努力,终身成长!
  18. gis计算频数_频数 (分析)
  19. 2009年甲骨文学院教师培训
  20. hive server2源码地址在哪_实战搭建Thinkphp二次开发威客RW平台源码粉丝关注投票发布系统...

热门文章

  1. 家族信托是什么东东?为何受到富豪们的大力吹捧?
  2. 数据依赖和控制依赖 Data Dependence and Contol Dependence
  3. Microsoft Store 里的一个倒数定时器软件 - Free Countdown Timer
  4. CSDN博客编辑小技巧
  5. 赢在云时代——企业云计算战略、方法和路线图
  6. 以太坊伦敦分叉EIP-1559介绍
  7. 485电路(组网/非组网) 上下拉匹配电阻选取
  8. 2018 团队设计天梯赛题解---华山论剑组
  9. 迅雷/旋风地址转换原理分析(转)
  10. 2021最后一次面试,快手三面Java一轮游,如今已拿意向书