清空輸入緩沖區(qū):
fflush(stdin); std::cin.clear(); //清除錯(cuò)誤標(biāo)記 std::cin.sync(); //清空緩沖區(qū) cin.clear() 只是更改cin的狀態(tài)標(biāo)示符,并沒有清除緩沖區(qū),而一般輸入是以回車為結(jié)束(轉(zhuǎn)化為換行符'\n'),所以cin.clear()并沒有起作用。應(yīng)該加上在cin.sync(); 或 fflush(stdin); 與cin.clear() 一起使用。
如果只調(diào)用cin.clear(),錯(cuò)誤標(biāo)記是被刪除了,可以繼續(xù)標(biāo)準(zhǔn)輸入了。但是別忘了,上次輸入的非數(shù)字字符(就是這個(gè)字符標(biāo)記了end-of-stream)還在緩沖區(qū)里呆著呢,繼續(xù)cin的話,會(huì)立即得到這個(gè)非數(shù)字字符,導(dǎo)致又一個(gè)end-of-stream,于是copy立即返回,結(jié)果什么也沒得到。
如果只調(diào)用cin.sync(),緩沖區(qū)是被清空了,但是錯(cuò)誤標(biāo)記還在,依然沒法繼續(xù)輸入。 所以cin.clear()和cin.sync()一個(gè)都不能少,但是順序可以顛倒。 清空輸出緩沖區(qū): fflush(stdout);
std::cout.clear(); std::cout.flush(); endl也有清空輸出緩沖區(qū)的功能. int main() {
}
|
|