天天看點

C語言輸入函數與緩沖區C語言輸入函數與緩沖區

C語言輸入函數與緩沖區

調用以下輸入函數,并從鍵盤輸入内容并回車後,緩沖區的情況

函數 緩沖區是否留下’\n’
scanf() yes
gets() no
getchar() yes

對于會在緩沖區留下換行符’\n’的方法,如果連續兩次調用,輸入完第一次以後,會自動跳過第二次輸入,為什麼呢?

因為實際上,C語言采用了緩沖區的機理,我們的輸入的字元(包括回車)都會先存入輸入緩沖區,scanf()、gets()、getchar()三個函數,實際上是讀取緩沖區内容的指令,如果緩沖區中有内容,就直接讀取緩沖區中的内容,隻有當緩沖區中沒有任何内容,才會要求鍵盤輸入。

調用完這些函數之後是否會在緩沖區留下回車字元,是由他們讀取緩沖區的方法所決定的。scanf函數根據輸入格式的不同,讀取的位元組數會不同。當讀取的是%s時,會一直讀到空格或者換行符以前的字元,也就是說緩沖區會留下空格或者換行符及以後的内容。gets函數和scanf讀取字元串的終止位置是一樣的,隻是它會自動清除緊接着的換行符。getchar函數是從緩沖區中讀取一個字元,不會去掉後面的換行符。

那麼對于要連續多次調用那些會在緩沖區中留下其他字元的函數,并且保證每次都提示輸入,就要在第二次及以後調用之前先清空緩沖區,具體就是調用這句話:

while (getchar()!=‘\n');

繼續閱讀