1. 程式人生 > >c語言getchar()的用法

c語言getchar()的用法

c語言getchar的用法:

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

2.前面的scanf()在讀取輸入時會在緩衝區中留下一個字元’\n’(輸入完s[i]的值後按回車鍵所致),

所以如果不在此加一個getchar()把這個回車符取走的話,gets()就不會等待從鍵盤鍵入字元,而

是會直接取走這個“無用的”回車符,從而導致讀取有誤

3.getchar()是在輸入緩衝區順序讀入一個字元(包括空格、回車和Tab)

getchar()使用不方便,解決方法:

(1)使用下面的語句清除回車:

while(getchar()!=’\n’);
getchar()函式執行一次會從鍵盤緩衝區(如果有內容就讀取,沒有內容就等待使用者輸入並以回車結束,回車相當於加上一個換行符\n)順序讀取一個字元並返回此ASCII碼,舉個例子:當我們呼叫一次getchar()時,然後輸入abc並回車,此時abc和\n才一起送入了鍵盤緩衝區,總共就是4個字元。而此時getchar()由於只運行了一次,所以取到的是a,剩下緩衝區的字元就是bc\n 源程式裡while(getchar()!=’\n’)意思就是一個一個字元讀取,直到碰到\n也就是回車就停止(當然\n也就不會被計入累加值)。我們在執行此程式時很直觀的感受是輸入完一個句子,然後回車馬上print,其實回車之後又根據句子長度執行了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’但是並

沒有賦給任何字元變數,所以不會有影響,相當於清除了這個字元.還要注意的是這裡你在鍵盤上輸入ss

ss看到的回顯正是來自於getchar的作用,如果用getch就看不到你輸入了什麼.

綜上所述:回車鍵頂替了輸入字元的第一個字元,如果不新增getchar();就會輸出錯誤。