當前位置:編程學習大全網 - 源碼下載 - 當妳輸入壹行字,按回車鍵,這壹行的內容是進入鍵盤緩沖區,還是在妳輸入的時候已經進入鍵盤緩沖區了?

當妳輸入壹行字,按回車鍵,這壹行的內容是進入鍵盤緩沖區,還是在妳輸入的時候已經進入鍵盤緩沖區了?

Getchar有壹個int返回值。當程序調用getchar時,程序等待用戶按鍵。用戶輸入的字符存儲在鍵盤緩沖區中,直到用戶按下Enter鍵(回車符也放在緩沖區中)。當用戶鍵入Enter時,Getchar開始從stdin流中壹次讀取壹個字符。getchar函數的返回值是用戶輸入的第壹個字符的ASCII碼。如果有錯誤,返回-1,用戶輸入的字符回顯到屏幕上。如果用戶在按Enter鍵之前輸入了多個字符,其他字符將保留在鍵盤緩沖區中,供後續的getchar調用讀取。也就是說後續的getchar調用會直接讀取緩沖區,而不需要等待用戶按鍵。

getch和getchar的基本功能是壹樣的,不同的是getch直接從鍵盤獲取鍵值,而不需要等待用戶按enter鍵。只要用戶按下壹個鍵,getch就會立即返回。getch的返回值是用戶輸入的ASCII碼,出錯時返回-1。輸入的字符不會出現在屏幕上。程序調試中經常用到getch函數,調試時在關鍵位置顯示相關結果以供查看,然後用getch函數暫停程序。

程序示例:

# include & ltstdio.h & gt

int main(void)

{

int c;

/*註意getchar從stdin和

是線路緩沖的;這意味著它會

直到妳按下回車鍵才返回。*/

while ((c = getchar())!= '\n ')

printf("%c ",c);

返回0;

}

註意:可以使用getchar()函數讓程序員在程序調試結束後返回編輯界面前按鍵盤。用法:主函數結束,返回0;;在其前面添加getchar();就這麽幹吧

關於文件終止符EOF

EOF是文件結尾的縮寫。

在C語言中,它是標準庫中定義的宏。

人們經常把EOF誤認為是從文件中讀取的字符(記住)。事實上,EOF不是壹個字符,它被定義為int類型的負數(例如,-1)。EOF實際上並不在文件中。EOF也不僅指文件讀到最後的狀態(可以用feof()檢測),還指I/O操作中的讀寫錯誤(通常可以用ferror())以及其他相關操作的錯誤狀態。

如果讀取文件的結尾,Getchar返回EOF。

大師經典要認真讀懂。以前看K &;r的c編程語言(第二版)

1.5部分的字符輸入/輸出被getchar()和EOF搞混了。可能主要是因為不清楚getchar()的工作原理和e of的用法。所以我覺得有必要總結壹下,不然很多瑣碎的知識點時間久了就會忘記,只有記下來才是最好的辦法。

實際上,getchar()最典型的程序只有幾行代碼。我用的環境是DebianGNU/Linux,其他系統也壹樣。

首先,getchar的兩個總結:

1.getchar是以行為單位訪問的。

使用getchar進行輸入時,如果輸入的第壹個字符是有效字符(即輸入的是文件終止符EOF,在Windows下是組合鍵Ctrl+Z,在Unix/Linux下是組合鍵Ctrl+D),那麽只有當最後輸入的字符是換行符' \n '(也可以是文件終止符EOF,後面會討論),getchar才會停止執行,整個程序才會停止。例如,下面的程序段:

while((c =getchar())!=EOF){

putchar(c);

}

執行程序,鍵入:abc,然後按回車鍵。然後程序會執行puchar(c)然後輸出abc。別忘了這個地方,系統輸出也有回車。然後就可以繼續輸入了,當再次遇到新的行字符時,程序會在終端上輸出該行的輸入字符。

對於getchar,我相信很多初學者會問,getchar不是用字符讀取的嗎?所以,既然輸入了第壹個字符A,就必須滿足while循環(c = getchar())!= EOF,那麽應該執行putchar(c)在終端輸出壹個字符A。沒錯,我用getchar的時候壹直是這麽想的,但是程序就是不執行,但是我要在輸出之前讀取壹個換行符或者文件EOF的結尾。

對於這個問題的壹種解釋是,高手寫C的時候,當時還沒有所謂的終端輸入的概念,所有的輸入實際上都是按照文件讀取的,文件壹般都是以行為為單位的。所以,只有遇到換行符,程序才會認為輸入結束,然後取程序的其他部分來執行。同時按照文件的方式訪問輸入,所以需要EOF(文件的Enf)來結束壹個文件的輸入,這也是getchar在結束輸入退出時使用EOF的原因。

2.2.getchar()的返回值壹般是字符,但也可能是負數,即返回e of。

這裏要強調的壹點是,getchar函數通常返回終端輸入的字符,這些字符系統中對應的ASCII值都是非負的。因此,很多時候,我們會寫兩行這樣的代碼:

char c;

c = getchar();

這很可能會引起問題。因為getchar函數不僅返回終端輸入的字符,還會在遇到CTRL+D(Linux下)時返回EOF,也就是文件終止符EOF,在函數庫中壹般定義為-1。因此,在這種情況下,getchar函數返回負值,將負值賦給char類型的變量是不正確的。為了使定義的變量包含getchar函數返回的所有可能值,正確的定義方法如下(k & amp;在《中華人民共和國憲法》中特別提到了這個問題:

int c;

c = getchar();

本文來自CSDN博客,轉載請註明出處:/minmin tuo/archive/2009/03/24/4021337 . aspx

  • 上一篇:開源推薦-C++開發的微服務框架Tars
  • 下一篇:怎麽上貝殼網查找已簽的租房合同?
  • copyright 2024編程學習大全網