getline讀取不等待輸入的問題

2021-06-21 10:22:35 字數 773 閱讀 9419

先cin >>,然後getline讀取時會發生一閃而過不等待輸入的情況,用fflush(stdin)清除輸入緩衝區也是如此,糾結半天終於在妹神指導下搞清楚

由於輸入乙個資料後按了回車鍵,而getline沒有忽略換行符,直接將前面輸入的數字後面的換行符當作了輸入,導致沒有等待輸入的情況。

此時,需要在getline前面新增cin.ignore()用來清除以回車結束的輸入緩衝區的內容,消除上一次輸入對下一次輸入的影響。

而fflush(stdin)用來清楚輸入快取,按說和ignore()作用應該相同,但是還是沒有等待輸入,後來搜尋得知,只有部分編譯器支援此函式如vc6.0,而linux下的gcc不支援此功能,而我正用的linux下gcc。

程式的輸入都建有乙個緩衝區,即輸入緩衝區。一次輸入過程是這樣的,當一次鍵盤輸入結束時(按enter鍵後,如果不按enter不會輸入快取區)會將輸入的資料存入輸入緩衝區,而cin等函式直接從輸入緩衝區中取資料。正因為cin函式是直接從緩衝區取資料的,所以有時候當緩衝區中有殘留資料時,cin函式會直接取得這些殘留資料而不會請求鍵盤輸入。此點需要注意。

cin.clear()重置錯誤標誌位,一般用於輸入出錯時清空錯誤標誌,以便進行下次輸入。比如當輸入乙個數字

int n;

while(1)

break;

}

此時輸入了乙個字元,此時會設定錯誤標誌,檢查cin.fail()是否輸入正確,如果輸入錯誤,首先要清空標誌位,不然ignore時會首先判斷標誌位,如果有錯誤標誌則不進行忽略操作,注意順序。



getline 輸入無效的原因

實際上你在每次輸入資料的時候會輸入乙個回車 n cin在讀入整數時候會忽略空白碰到非數字 n 時停止 cin在getline時會把 n 及之前的內容讀回來,哪怕是空行也會讀入 cin在讀入字元時會把緩衝區內當前字元讀入 不會忽略空白 cin.ignore 1000,n 的含義是把緩衝區內從當前字元開...

面向行的輸入 getline()和get()

getline getline 函式讀取整行,它使用通過回車鍵輸入的換行符來確定輸入結尾。呼叫方法為cin.getline 該函式有兩個引數。第乙個引數是陣列名,第二個引數是要讀取的字元數。例如第二個引數為n,則函式最多讀取n 1個字元,因為至少要保留乙個空間存空字元,即 0 getline 成員函...

C 字串的輸入和用getline輸入遇到的問題

c 中的字串讀入我們通常是用 cin str 它只要碰到空格或者換行符就意味著本字串讀取結束,且不會讀取空格和換行符 相當於叢輸入流中丟掉 而getline函式讀取一行字串,可以讀入空格,遇到換行符結束 從輸入流中丟掉該換行符 且緊跟後續的getline不會讀取到該換行符。但是,注意一點就是 如果唯...