人人學編程 C語言入門 單字符輸入、輸出(I/O),及緩衝區的概念

編程語言 C語言 技術 人生算法 人生算法 2017-09-04

人人學編程 C語言入門 單字符輸入、輸出(I/O),及緩衝區的概念

摘要: I/O函數將信息傳輸至您的程序並從你的程序中傳出信息:printf()、scanf() getchar() putchar()就是這樣的例子。已經在前面的例子中見過這些函數,現在您將瞭解到它們的基礎概念。同時您還將看到改進程序用戶界面的方法。


  • 單字符I/O:getchar()和putchar()

getchar()和putchar()每次輸入和輸出一個字符。

程序示例 echo.c程序

/*echo.c--重複輸入*/#include <stdio.h>int main(void){ char ch ;  while((ch=getchar())!='#')  putchar(ch);  return 0;}

ANSI C 將stdio.h頭文件與使用getchar()和putchar()相關聯,這就是我們在程序中將該文件包含在內的原因。

看過此程序後,您可能想知道在回顯輸入之前為什麼必須鍵入完整的一行。您可能還想知道是否在在更好的方法來終止輸入。讓我們來學習C程序對鍵盤輸入的處理方式。我們先來研究緩衝和標準輸入文件的概念。


  • 緩衝區

當您在一些系統上運行前面的程序時,您所輸入的文本立即回顯。也就是說,一個可能的運行示例如下所示:

HHeelllloo,,tthheerree..II wwoouulldd[enter]

lliikkee aa#

前面描述的行為是例外的。

在大多數系統上,在您按下回車鍵之前什麼都不會發生,正如在第一個例子中所示。

輸入字符的立即回顯是非緩衝(unbuffered)或直接(direct)輸入的一個實例,它表示您所鍵入的字符對正在等待的程序立即變為可用。

相反,延遲迴顯是緩衝(buffered)輸入的實例,這種情況下您所鍵入的字符被收集並存儲在一個被稱為緩衝區(buffer)的臨時存儲區域中按下回車鍵可使您所鍵入的字符對程序變為可用

為什麼需要緩衝區?首先,將若干個字符作為一個塊傳輸比逐個發送這些字符耗費時間少其次,如果您輸入有誤,就可以使用您的鍵盤更正功能來修正錯誤。當最終按下回車鍵時,您就可以發送正確的輸入。

  • 緩衝分為兩種:完全緩衝(fully buffered)I/O和行緩衝(line-buffered)I/O。對完全緩衝來說,緩衝區滿時被清空(內容被髮送至其目的地)。這種類型的緩衝通常出現在文件輸入中。緩衝區的大小取決於系統,但512字節和4096字節是常見的值。對行緩衝I/O來說,遇到一個換行字符時將被清空緩衝區。鍵盤輸入是標準的行緩衝,因此按下回車鍵將清空緩衝區。

不存在調用非緩衝輸入的標準ANSI方式。


-->下節預告:如何終止鍵盤的輸入

人人學編程 C語言入門 單字符輸入、輸出(I/O),及緩衝區的概念

相關推薦

推薦中...