getchar and getch

1.從緩衝區讀走一個字符,相當於清除緩衝區

2.前面的scanf()在讀取輸入時會在緩衝區中留下一個字符'\n'(輸入完s[i]的值後按回車鍵所致),所以如果不在此加一個getchar()把這個回車符取走的話,gets()就不會等待從鍵盤鍵入字符,而是會直接取走這個“無用的”回車符,從而導致讀取有誤

3.
getchar()是在輸入緩衝區順序讀入一個字符(包括空格、回車和Tab)
getchar()使用不方便,解決方法: 
(1)使用下面的語句清除回車: 
while(getchar()!='\n'); 
(2)用getche()或getch()代替getchar(),其作用是從鍵盤讀入一個字符(不用按回車),注意要包含頭文件<conio.h>

4.【轉】
getchar()是stdio.h中的庫函數,它的作用是從stdin流中讀入一個字符,也就是說,如果stdin有數據的話不用輸入它就可以直接讀取了,第一次getchar()時,確實需要人工的輸入,但是如果你輸了多個字符,以後的getchar()再執行時就會直接從緩衝區中讀取了。
實際上是 輸入設備->內存緩衝區->程序getchar  
你按的鍵是放進緩衝區了,然後供程序getchar  
你有沒有試過按住很多鍵然後等一會兒會滴滴滴滴響,就是緩衝區滿了,你後頭按的鍵沒有存進緩衝區.  
鍵盤輸入的字符都存到緩衝區內,一旦鍵入回車,getchar就進入緩衝區讀取字符,一次只返回第一個字符作爲getchar函數的值,如果有循環或足夠多的getchar語句,就會依次讀出緩衝區內的所有字符直到'\n'.要理解這一點,之所以你輸入的一系列字符被依次讀出來,是因爲循環的作用使得反覆利用getchar在緩衝區裏讀取字符,而不是getchar可以讀取多個字符,事實上getchar每次只能讀取一個字符.如果需要取消'\n'的影響,可以用getchar();來清除,這裏getchar();只是取得了'\n'但是並沒有賦給任何字符變量,所以不會有影響,相當於清除了這個字符.還要注意的是這裏你在鍵盤上輸入ssss看到的回顯正是來自於getchar的作用,如果用getch就看不到你輸入了什麼.


getchar 由宏實現:#define getchar() getc(stdin)。getchar有一個int型的返回值.當程序調用getchar時.程序就等着用戶按鍵.用戶輸入的字符被存放在鍵盤緩衝區中.直到用戶按回車爲止(回車字符也放在緩衝區中).當用戶鍵入回車之後,getchar纔開始從stdio流中每次讀入一個字符.getchar函數的返回值是用戶輸入的字符的ASCII碼,如出錯返回-1,且將用戶輸入的字符回顯到屏幕.如用戶在按回車之前輸入了不止一個字符,其他字符會保留在鍵盤緩存區中,等待後續getchar調用讀取.也就是說,後續的getchar調用不會等待用戶按鍵,而直接讀取緩衝區中的字符,直到緩衝區中的字符讀完爲後,纔等待用戶按鍵.
getch與getchar基本功能相同,差別是getch直接從鍵盤獲取鍵值,不等待用戶按回車,只要用戶按一個鍵,getch就立刻返回,getch返回值是用戶輸入的ASCⅡ碼,出錯返回-1.輸入的字符不會回顯在屏幕上.getch函數常用於程序調試,在調試時,在關鍵位置顯示有關的結果以待查看,然後用getch函數暫停程序運行,當按任意鍵後程序繼續運行.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章