關於getchar 的理解

2021-06-19 09:18:11 字數 1541 閱讀 4162

1.getchar()是stdio.h中的庫函式,它的作用是從stdin流中讀入乙個字元,也就是說,如果stdin有資料的話不用輸入它就可以直接讀取了,第一次getchar()時,確實需要人工的輸入,但是如果你輸了多個字元,以後的getchar()再執行時就會直接從緩衝區中讀取了。

實際上是 輸入裝置->記憶體緩衝區->程式getchar

你按的鍵是放進緩衝區了,然後供程式getchar

你有沒有試過按住很多鍵然後等一會兒會滴滴滴滴響,就是緩衝區滿了,你後頭按的鍵沒有存進緩衝區.

鍵盤輸入的字元都存到緩衝區內,一旦鍵入回車,getchar就進入緩衝區讀取字元,一次只返回第乙個字元作為getchar函式的值,如果有迴圈或足夠多的getchar語句,就會依次讀出緩衝區內的所有字元直到'

\n'.要理解這一點,之所以你輸入的一系列字元被依次讀出來,是因為迴圈的作用使得反覆利用getchar在緩衝區裡讀取字元,而不是getchar可以讀取多個字元,事實上getchar每次只能讀取乙個字元.如果需要取消'

\n'的影響,可以用getchar();來清除,這裡getchar();只是取得了'

\n'但是並沒有賦給任何字元變數,所以不會有影響,相當於清除了這個字元.還要注意的是這裡你在鍵盤上輸入ssss看到的回顯正是來自於getchar的作用,如果用getch就看不到你輸入了什麼.

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

3.前面的scanf()在讀取輸入時會在緩衝區中留下乙個字元'

\n'(輸入完s[i]的值後按回車鍵所致),所以如果不在此加乙個getchar()把這個回車符取走的話,gets()就不會等待從鍵盤鍵入字元,而是會直接取走這個「無用的」回車符,從而導致讀取有誤

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

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

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

while(getchar()!='

\n');

(2)用getche()或getch()代替getchar(),其作用是從鍵盤讀入乙個字元(不用按回車),注意要包含標頭檔案

重點:第乙個getchar()使使用者進入輸入模式,直到使用者鍵入回車結束,如果輸入多於乙個字元,將儲存在緩衝區,等待下一次的getchar(),從緩衝區讀取字元。
用getchar()讀取乙個字串。清除使用者輸入的回車,用while

(getchar()!='\n

');即可解決,也可以ch=getchar;while(ch!='\n')。後面乙個較難理解,第乙個getchar(),控制使用者輸入,並儲存第乙個字元,然後迴圈裡面的getchar()負責從緩衝區讀取字元,ch!='\n'控制讀到最後。

自己寫的乙個getchar()的c程式。
#includevoid main()

w[i]='\0';

/*for(j=0;j

printf("\n");

*/puts(w);

}

希望能對理解getchar()有幫助。

關於getchar的理解

最近在看k r的c語言程式設計,看到有個地方很不是理解,查閱了較多的資料後才恍然大悟,記錄一下先。程式是比較常見的從控制台獲得一行,並返回這行的長度。程式如下 int getline char s,int lim 開始對getchar這個函式不是很理解,為什麼每次迴圈都讀取乙個 char 既然我是個...

getchar 與scanf 的理解

1.getchar 是將輸入的字元都存到緩衝區中,直到輸入回車 將回車也存到緩衝區中 才讀取緩衝區中的字元,而且若輸入了多個字元到緩衝區中,後面的字元不用按回車便會依次讀取到後序的getchar 中。2.scanf 的程式片段如下 char a,b,c,d scanf c a scanf c b s...

關於getline和getchar注意的細節

關於getline和getchar注意的細節 link include include include using namespace std int main void system pause return 0 如果不加getchar 再輸入n時會有輸出常量。原因是cin輸入後,會存放在緩衝區,...