當類型不匹配時理解cin 的無限循環
使用cin 函數讀取輸入時,如果預期的輸入可能會發生無限循環是數字,但改為輸入字元。出現這種情況是因為cin遇到非數位輸入時失敗,進入fail狀態,導致無法提示進一步輸入。
死循環的原因
中提供的代碼:
unsigned long ul_x1, ul_x2; while (1) { cin >> ul_x1 >> ul_x2; cout << "ux_x1 is " << ul_x1 << endl << "ul_x2 is " << ul_x2 << endl; }
如果提供了無效的輸入,cin 會失敗並保持該狀態。結果,循環永遠不會進入 cin 再次讀取輸入的區塊,導致無限循環。
防止無限循環
要避免此問題,可以驗證使用 cin的失敗狀態輸入:
if (cin.fail()) { cout << "ERROR -- You did not enter an integer"; // Clear fail state and discard bad input cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
替代:基於字串驗證
對於更複雜的驗證,在執行基於字串的特定檢查之前將輸入讀取取為字串可能會很有幫助,以確保其符合預期格式。
以上是為什麼 `cin` 會導致類型不符的無限循環?的詳細內容。更多資訊請關注PHP中文網其他相關文章!