一步一步学Linux C:关于EOF


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才会从键盘缓冲区中读取数值。如下面程序段:

  1. while((c=getchar())!=EOF){    
  2. putchar(c);    
  3. }  

若是按enter键结束的,最后会打印出enter键当然此键是不可见的,并等待下次的输入。

若是按ctrl+D结束的,直接打印有效数据,并等待下次输入。

当你没有输入有效数据按下enter键会直接打印出enter键(当然这个键是不可见的),并再次等待下次的输入,直接按下ctrl+D键时,程序执行下面的程序代码,不在等待输入。

2.getchar()的返回值一般情况下是字符,但也可能是负值,即返回EOF。

这里要强调的一点就是,getchar函数通常返回终端所输入的字符,这些字符系统中对应的ASCII值都是非负的。因此,很多时候,我们会写这样的两行代码:

  1. charc;   
  2. c=getchar();  

这样就很有可能出现问题。因为getchar函数除了返回终端输入的字符外,在遇到Ctrl+D(Linux下)即文件结束符EOF时,getchar()的返回EOF,这个EOF在函数库里一般定义为-1。因此,在这种情况下,getchar函数返回一个负值,把一个负值赋给一个char型的变量是不正确的。为了能够让所定义的变量能够包含getchar函数返回的所有可能的值,正确的定义方法如下(K&R C中特别提到了这个问题):

  1. intc;    
  2. c=getchar();  
  • 1
  • 2
  • 3
  • 下一页

相关内容