死迴圈中的cin

2021-07-22 18:03:53 字數 630 閱讀 7160

在編寫程式時,遇到了乙個致命的問題,原本是想使用cin輸入乙個int型的數值,但是錯誤的輸入了char或者string型,導致程式進入死迴圈。

類似程式如下:

#include

using namespace std;

int main()

} while (i < 0);

return 0;

}定義了乙個int型的 i ,但是當 i 輸入型別不是int型時就會進入死迴圈。

按照 這裡的介紹,應該是錯誤標誌符的原因,當我們輸入的型別不匹配時,將會返回乙個錯誤,使用cin.fail()函式可以確定輸入是否錯誤。

怎麼解決呢?

我在網上搜了好多,普遍做法都是清楚緩衝區和清楚錯誤標誌。網上大多數的方法大多是使用cin.clear(),或者cin.ignore() 等等,但是我試過了還是不行,按照上面的部落格中的做法,好像也不行。

我們現在要做的是:清楚緩衝區和清楚錯誤標誌;

下面是我修改過的做法,實驗後可行:

#include

using namespace std;

int main()

} while (i < 0);

return 0;

這是可以防止cin不能輸入,進入死迴圈。

while迴圈中將cin輸入作為條件問題 擴充套件

先看一段 vector int vecnum int num 0 while cin num vecnum.push back num cin num 這是乙個簡單的 但是這裡會有乙個問題,就是 cin num 位於迴圈外的輸入這行 無法輸入任何數值。原因是什麼呢?我們知道在迴圈中,我們想要結束迴圈...

shell 死迴圈if判斷 shell 死迴圈

例1 執行指令碼後會自動載入firefox瀏覽器,並開啟指定網頁。如果使用者關閉firefox,指令碼會再次自動重新開啟firefox。如需結束迴圈,中止t2.sh程序即可。注意不要同時執行兩個t1.sh指令碼,否則 若事先不知道指令碼名,也可以通過類似於 pstree grep firefox 的...

C 中while迴圈中cin語句被跳過問題解析

今天在寫 的時候,遇到了乙個非常奇怪的問題 while true if select 2 else 這段 的本意是想要規範輸入,提高容錯率。但是當我輸入乙個字元比如 a 的時候,while迴圈中的cin語句將會被跳過,進入無限的死迴圈。上網查閱了很多資料,發現了問題所在 msdn上cin的定義如下 ...