解決cin因為輸入錯誤的資料型別進入死迴圈的問題

2021-08-04 07:34:23 字數 466 閱讀 4528

問題:如果按照下述的**來檢查使用者的輸入是否合法,是不夠的,當輸入乙個與期望不同的資料型別後,cin的狀態會變成fail,當下次執行cin會直接跳過,這樣就變成了死迴圈。

int a;

while (1)

解決:先用cin.clear()將cin的狀態恢復初始態,再使用getchar()將快取清空(必要的一步,使用getchar()可以在任何編譯器中實現而不用擔心函式的相容性),具體做法如下:

int a;

while (1)

cout << "error" << endl;

}else

cout << a << endl;

}

補充:最進發現使用組合cin.clear()和cin.ignore()函式也可以(visual studio 2017)。

關於C 的cin的錯誤輸入的問題以及解決辦法

最近學校期末用c 做乙個實訓專案,在用到cin獲得使用者輸入的時候考慮到使用者輸入的不確定性,要規範cin返回的值,否則會造成意想不到的結果。先來乙個簡單的例子 int num input cin num input while num input 0 cout 這串看起來很平常的 當我們隨便輸入乙...

sql2005 因為它正用於複製」的錯誤解決辦法

use master 執行即可 sp removedbreplication 該儲存過程在發布伺服器的發布資料庫中或在訂閱伺服器的訂閱資料庫中執行。該過程將從執行它的資料庫中刪除所有複製物件,但它不會從其他資料庫 例如,分發資料庫 中刪除物件。注意 只有當其他刪除複製物件的方法都失敗後,才應當使用此...

sql2005 因為它正用於複製 的錯誤解決辦法

usemaster exec sp removedbreplication 資料庫名稱 go執行即可 sp removedbreplication 該儲存過程在發布伺服器的發布資料庫中或在訂閱伺服器的訂閱資料庫中執行。該過程將從執行它的資料庫中刪除所有複製物件,但它不會從其他資料庫 例如,分發資料庫...