關於getchar的理解

2021-05-22 17:40:47 字數 627 閱讀 3604

最近在看k&r的c語言程式設計,看到有個地方很不是理解,查閱了較多的資料後才恍然大悟,記錄一下先。

程式是比較常見的從控制台獲得一行,並返回這行的長度。程式如下

int getline(char s,int lim)

開始對getchar這個函式不是很理解,為什麼每次迴圈都讀取乙個 char ,既然我是個迴圈,為什麼只讀取了一次,並且既然是讀取char怎麼能自動把一行給讀取出來呢?

原來第一次getchar()時,確實需要人工的輸入,但是如果你輸了多個字元,以後的getchar()再執行時就會直接從緩衝區中讀取了。因為我們輸入的字串並不是取了第乙個字元就把剩下的字串丟掉了,它還在我們的記憶體中,好比,開閘放水,我們把水放到閘裡去以後,開一次閘就放掉一點,開一次就放掉一點,直到放光了為止,這裡開閘動作就相當於呼叫一次getchar()。我們輸入的字串也是這麼一回事,首先我們輸入的字串是放在記憶體的緩衝區中的,我們呼叫一次getchar()就把緩衝區中里出口最近的乙個字元輸出,也就是最前面的乙個字元輸出,輸出後,就把它釋放掉了,但後面還有字串,所以我們就用迴圈把最前面的乙個字元乙個個的在記憶體中釋放掉,直到不滿足迴圈條件退出為止

所以每次我讀取的都是快取中的**,疑問也就迎刃而解了。並且getchar每次讀取的時候,你按了回車,在最後都會多乙個'/n'

關於getchar 的理解

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

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輸入後,會存放在緩衝區,...