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