歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 一步一步學Linux C:關於EOF

一步一步學Linux C:關於EOF

日期:2017/3/1 10:27:44   编辑:Linux編程

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();
Copyright © Linux教程網 All Rights Reserved