當您在一些系統上運行前面的程序時,您所輸入的文本立即回顯。但是在大多數系統上,在您按下回車鍵之前什麼都不會發生。
輸入字符的立即回顯是非緩沖或直接輸入的一個實例,它表示您所鍵入的字符對正在等待的程序立即變為可用。
延遲回顯是緩沖輸入的實例,在這種情況下您所鍵入的字符被收集並存儲在一個被稱為緩沖區的臨時存儲區中。按下回車鍵可使您所鍵入的字符塊對程序變為可用。
其次,如果您輸入有誤,就可以使用您的鍵盤更正功能來修正錯誤。
對行緩沖來說,遇到一個換行字符時被清空緩沖區。硬盤輸入是標准的行緩沖。
8.3.1 文件、流和鍵盤輸入
文件是一塊存儲信息的存儲器區域。
從概念上說,C程序處理一個流而不是直接處理文件。
流是一個理想化的數據流,實際輸入或輸出映射到這個數據流。
8.3.2 文件結尾
檢測文件結尾的一種方法是在文件中放置一個特殊字符來標志結尾。
第二種方法是讓操作系統存儲文件大小的信息。
對於這兩種不同的方法,C的處理方法是讓getchar()函數在到達文件結尾時返回一個特殊值,而不去管操作系統是如何檢測文件結尾的。賦予該值的名稱是EOF。
通常EOF在stdio.h文件中定義為-1。
變量ch從char類型改變為int類型。這是因為char變量可以由范圍在0到255中的無符號整數來表示,但EOF可能具有數值-1。該值對無符號char變量是不可能的值,但對int則是可能的。
BUG:程序讀取n響應並把它看作是您的一次否定,然後讀取換行字符並把它也看作是您的一次否定。
一種解決方案是使用一個while循環來丟棄輸入行的其余部分,包括換行符。
while(getchar()!='\n')
continue;
許多程序使用getchar()來逐個字符地讀取輸入。通常,系統使用行緩沖輸入,這意味著輸入的內容在您按下回車鍵時傳輸給程序。此時還將傳輸一個編程時需要注意的換行字符。ANSI C將緩沖輸入作為標准。