C語言學習 getchar 的作用機制

2021-07-11 18:10:59 字數 1267 閱讀 3123

標準庫提供的輸入/輸出都是按照字元流的方式處理的。文字流是由多行字元構成的字串行,而每行字元都由0個或多個字元組成,行末是乙個\n。

getchar()似乎是由回車觸發的。例如下面的程式:

void copyandpaste()

}

執行程式後,當輸入一行字元,然後按回車後,下一行會顯示所輸入的字元。如下圖所示:

此處與程式字面上就有點對應不上了,程式中明明是讀取乙個,輸出乙個啊?為什麼會回車後才一股腦輸出?

此處就涉及到getchar()函式的觸發機制問題了。

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

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

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

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

鍵盤輸入的字元都存到緩衝區內,一旦鍵入回車,getchar就進入緩衝區讀取字元,一次只返回第乙個字元作為getchar函式的值,如果有迴圈或足夠多的getchar語句,就會依次讀出緩衝區內的所有字元直到』\n』.要理解這一點,之所以你輸入的一系列字元被依次讀出來,是因為迴圈的作用使得反覆利用getchar在緩衝區裡讀取字元,而不是getchar可以讀取多個字元,事實上getchar每次只能讀取乙個字元.如果需要取消』\n』的影響,可以用getchar();來清除,這裡getchar();只是取得了』\n』但是並沒有賦給任何字元變數,所以不會有影響,相當於清除了這個字元.還要注意的是這裡你在鍵盤上輸入ssss看到的回顯正是來自於getchar的作用,如果用getch就看不到你輸入了什麼.

下面的程式更直觀顯示了getchar怎麼乙個乙個從緩衝區讀出字元的。單步執行即可。

void getputchar()

}

執行結果如下:

注意最後乙個回車和a,putchar把getchar讀到的\n也輸出了。\n的asiic碼為0x0a。

getchar 函式的作用

1 清除回車符 2 檢視程式中間結果 3 一次向快取讀入乙個字元 4 getchar 是快取輸入函式,從鍵盤輸入多個字元時 將所有字元儲存在鍵盤快取區,直到遇到回車 符,getchar 函式才從stdio流中讀入乙個字元 getch 是非快取輸入函式,鍵入乙個字元就輸 出,沒有快取功能。詳細說明如下...

C語言學習

c語言學習 2013 3 26 1 編寫strcat s,t 函式,功能 將t指向的字串複製到s指向的字串的尾部。程式設計思路 1 通過while迴圈找到字串s的結束符。2 從找到的結束符開始將t複製到s,同時移動二者的指標。2 編寫函式strend s,t 如果字串t出現在字串s的尾部,該函式返回...

c語言學習

今天總結一些c 語言方面的知識 變數的概念 其值在作用域內可以改變的量稱為變數。乙個變數應該有乙個名字,並在記憶體中佔據一定儲存空間。區域性變數和全域性變數 區域性變數是在函式內作定義說明的,其作用域僅限函式內,離開該函式再使用這種變數是非法的。全域性變數也稱為外部變數,是在函式外部定義的變數,它不...