EOF是 End Of File 的缩写。在C语言中,它是在标准库中定义的一个宏。
(1) 判断文件结束
多数人认为文件中有一个EOF,用于表示文件的结尾. 但这个观点实际上是错误的,在文件所包含的数据中,并没有什么文件结束符. 对getc 而言, 如果不能从文件中读取,则返回一个整数 -1,这就是所谓的EOF. 返回 EOF 无非是出现了两种情况,一是文件已经读完; 二是文件读取出错,反正是读不下去了.
文件结束符EOF,Windows下为组合键Ctrl+Z,Unix/Linux下为组合键Ctrl+D
在linux中ctrl+c是程序结束命令就是向程序发送kill消息
一、getchar的两点总结:
1.当你输入一些有效数据时,最后加上enter键或ctrl+D键getchar才会从键盘缓冲区中读取数值。如下面程序段:
while((c=getchar())!=EOF){ putchar(c); }若是按enter键结束的,最后会打印出enter键当然此键是不可见的,并等待下次的输入。
若是按ctrl+D结束的,直接打印有效数据,并等待下次输入。
当你没有输入有效数据按下enter键会直接打印出enter键(当然这个键是不可见的),并再次等待下次的输入,直接按下ctrl+D键时,程序执行下面的程序代码,不在等待输入。
2.getchar()的返回值一般情况下是字符,但也可能是负值,即返回EOF。
这里要强调的一点就是,getchar函数通常返回终端所输入的字符,这些字符系统中对应的ASCII值都是非负的。因此,很多时候,我们会写这样的两行代码:
charc; c=getchar();这样就很有可能出现问题。因为getchar函数除了返回终端输入的字符外,在遇到Ctrl+D(Linux下)即文件结束符EOF时,getchar()的返回EOF,这个EOF在函数库里一般定义为-1。因此,在这种情况下,getchar函数返回一个负值,把一个负值赋给一个char型的变量是不正确的。为了能够让所定义的变量能够包含getchar函数返回的所有可能的值,正确的定义方法如下(K&R C中特别提到了这个问题):
intc; c=getchar();