在cin>><int/float>時 如果我們輸入一個字符 就會導致刷屏的結果 這是因為非數字字符無法被cin接收而一直停留在緩沖區,導致下一次cin時直接從緩存讀數 但字符無法讀取結果導致無限循環 這被很多人認為成庫的bug
解決方法:
1> 在cin>><int/float>后加cin.ignore(); cin.clear();
cin.ignore()方法cin.ignore( 5, 'c' ) 的是從輸入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每拋棄一個字符,它都要計數和比較字符:如果計數值達到5或者被拋棄的字符是'c',則cin.ignore() 函數執行終止;否則,它繼續等待。 它的一個常用功能就是用來清除以回車結束的輸入緩沖區的內容,消除上一次輸入對下一次輸入的影響。比如可以這么用:cin.ignore( 1024, '\n' );,通常把第一個參數設置得足夠大,這樣實際上總是只有第二個參數 '\n' 起作用,所以這一句就是把回車(包括回車)之前的所以字符從輸入緩沖(流)中清除出去。
cin.clear用法如果輸入發生錯誤發生,那么流狀態既被標記為錯誤,你必須清除這些錯誤狀態,以使你的程序能正確適當地繼續運行。要清除錯誤狀態,需使用clear()函數。此函數帶一個參數,它是你將要設為當前狀態的標志值。,只要將ios::goodbit作為實參。
2> 在cin>><int/float>后加fflush(stdin);(需要stdio.h)
fflush(stdin)刷新標準輸入緩沖區