c语言中的EOF

全文结束符是什么意思?就是\0么。还有当我在屏幕上敲了一串字符,系统怎么知道我何时全文结束,何时添加EOF?比如C语言中我们经常有这种用法while((ch=getcha... 全文结束符是什么意思?就是\0么。还有当我在屏幕上敲了一串字符,系统怎么知道我何时全文结束,何时添加EOF?
比如C语言中我们经常有这种用法
while((ch=getchar())!=EOF)和while((ch=getchar()!='\n'))这两种有什么区别?当我在屏幕上输入了一串字符并且按了回车之后,那么应该是一串字符最后边跟着一个\n,EOF又添加在哪个位置。
展开
 我来答
月影儿格格
2018-04-17 · TA获得超过1.6万个赞
知道小有建树答主
回答量:66
采纳率:100%
帮助的人:1.8万
展开全部

EOF是End Of File的意思,在C语言中定义的一个宏,用作文件结束标志。从数值角度看,就是-1。

从一个终端的输入从来不会真的“结束”(除非设备被断开),但把从终端输入的数据分区成多个“文件”却很有用,因此一个关键的序列被保留下来来指明输入结束。

在UNIX和AmigaDOS中,将击键翻译为EOF的过程是由终端的驱动程序完成的,因此应用程序无需将终端和其它输入文件区分开来。

Unix平台的驱动程序在行首传送一个传输结束字符(Control-D,ASCII编码为为04)来指明文件结束。

在AmigaDOS中,驱动程序传送一个Control-\来指明文件结束(而Control-D被用作中断字符)。要向输入流中插入一个真正的Control-D字符,用户需要把一个“引用”命令字符放在它的前面(通常是Control-V,表示下一个字符不作为控制字符,而是按照字面量使用)。

在微软的DOS和Windows(以及CP/M和许多DEC操作系统)中,读取数据时终端不会产生EOF。此时,应用程序知道数据源是一个终端(或者其它“字符设备”),并将一个已知的保留的字符或序列解释为文件结束的指明;最普遍地说,它是ASCII码中的替换字符(Control-Z,代码26)。

一些MS-DOS程序,包括部分微软MS-DOS的shell(COMMAND.COM)和操作系统功能程序(如EDLIN),将文本文档中的Control-Z视为有意义数据的结尾,并且/或者在写入文本文档时将Control-Z添加到文档末尾。这是由于两个原因:

1、向后兼容CP/M。CP/M的第1版与第2版的文件系统以128字节“块”的倍数记录文件长度,所以当有意义数据在一个“块”的中间结束时,习惯上用Control-Z字符来标记它,此后至块结尾的字节为未利用。而MS-DOS文件系统总会记录文件确切的字节长度,所以在MS-DOS中文件不再必需以Control-Z字符来标记结尾。

2、它使得应用程序在从终端和文本文档读取数据时得以使用相同的代码。

概念:

在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。

应用:

档案存取或其它 I/O 功能可能传回等于象征符号值 (巨集) EOF 指示档案结束的情形发生。实际上 EOF 的值通常为 -1,但它依系统有所不同。巨集 EOF会在编译原始码前展开实际值给预处理器。

C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功。

例如:

在 UNIX中, EOF表示能从交互式 shell (终端) 送出 Ctrl+D (习惯性标准)。在微软的 DOS 与 Windows 中能送出 Ctrl+Z。在某些例子处理纯文字档案或从"字元设备"读入资料,微软MS-DOS的 shell 或系统程序会加入ASCIIControl-Z 字元到磁碟档案结束处 (尽管基本核心MSDOS.SYS档案写入呼叫从未附加 Control-Z)。这是向下相容于一些奇特的CP/M功能,从CP/M 档案系统只能就记录的档案长度分配多少 128 位元 "记录"。MS-DOS 档案系统从一开始就能精确的记录档案的位元长度。

ASCII控制字符在字元串流是 out-of-band 不可列印字元。通常表可读的助忆码。

在控制台要输入eof的话 按ALT+65535就可以了。

与feof:

C语言中,当把数据以二进制形式存放到文件中时,就会有-1值的出现,此时不能采用EOF作为二进制文件的结束标志。为解决这个问题,ANSI C提供一个feof函数,用来判断文件是否结束。如果遇到文件结束,函数feof(fp)的值为1,否则为0.feof函数既可用以判断二进制文件是否结束,也可以用以判断文本文件是否结束。[1] 

例如:编写程序,用于把一个文本文件(源文件)复制到另一个文件(目的文件)中。源文件名为file_a.dat,目的文件名为file_b.dat。程序如下:

EOF 函数:

返回一个数值(整数类型Integer),它包含布尔值Boolean值True,表明已经到达为Random(Open语句方法)或顺序Input (Open 语句方法)打开的文件的结尾。

语法:

EOF(filenumber)

必要的filenumber参数是一个Integer,包含任何有效的文件号。

说明:

EOF (End Of File)

使用EOF是为了避免因试图在文件结尾处进行输入而产生的错误。

直到到达文件的结尾,EOF函数都返回False。对于为访问Random或Binary而打开的文件,直到最后一次执行的Get语句无法读出完整的记录时,EOF都返回False。

百度网友3fe025987
2013-04-26 · TA获得超过1874个赞
知道小有建树答主
回答量:1055
采纳率:62%
帮助的人:541万
展开全部
很好理解,EOF 是 -1 ,-1是两个字符,getchar一次只能输入一个字符,所以要根据系统来使用组合键,一般是ctrl+d,ctrl+z
\n 就是回车符。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友83cdc1c
2013-04-26 · TA获得超过5788个赞
知道大有可为答主
回答量:1907
采纳率:100%
帮助的人:824万
展开全部
全文结束就是文本的结束,’\0'是字符串结尾字符,在屏幕上敲的话,linux下输入ctrl+d,windows下输入ctrl+z,OS下输入f4,就能输入EOF。
两个while语句,前面一个判断读取字符是否为EOF,后面一个判断读取字符是否为换行字符。如果敲回车的话,没有EOF,只有\r,\r是回车符。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
alec_z87
2013-04-26 · 超过24用户采纳过TA的回答
知道答主
回答量:170
采纳率:0%
帮助的人:70.8万
展开全部
全文结束符是什么意思?

全文结束,那一片文章来说 文章中会有换行(即是回车),回车是一行的结束。全文结束符石一篇文章的结束!
eof是当你关闭文件时自动生成的 系统会自动检测 不用你输入。而换行符是你输入的 系统会检测'\n'

两个while语句,前面一个判断读取字符是否为EOF,后面一个判断读取字符是否为换行字符。如果敲回车的话,没有EOF,只有\r,\r是回车符。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
客从雪域来
推荐于2017-11-25
知道答主
回答量:34
采纳率:0%
帮助的人:25.8万
展开全部
想输入EOF就按Ctrl+z嘛,输入一串字符,然后回车,然后按ctrl+z,再回车,就行了。全文结束符不是\0,EOF在asii代码中是没有正值的,它的值是-1,所以不能对应任何一个字符,所以就拿它作为结束标志
while((ch=getchar())!=EOF)和while((ch=getchar()!='\n'))这两种区别就是前一种你得输入EOF,也就是按ctrl+z循环才会结束,后一种你按回车以后循环就会结束
就是一个结束标志而已,比如你把EOF或者'\n'换成’b‘,那就是程序检测到b后,也就是你输入b后循环就会结束,换成’ ‘那就是输入空格时循环结束。
还有楼下说的回车是\r那是错误的,\r确实是回车符,但是我们键盘上的回车键输入的是\n而不是\r,这个\n和\r的区别百度上都有
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式