理解cin 和數字類型錯誤的無限循環
在某些程式設計場景中,我們在使用cin 輸入字串時可能會遇到無限循環行為同時期待數值。本文深入探討了這個問題並提供了可能的解決方案。
無限循環的解釋
您提供的循環:
while (1) { cin >> ul_x1 >> ul_x2; cout << "ul_x1 is " << ul_x1 << endl << "ul_x2 is " << ul_x2 << endl; }
將無限循環如果輸入的是字符而不是數字,則進行迭代。這是因為當cin遇到非數位輸入時,它會進入失敗狀態並停止提示進一步輸入。因此,循環仍然卡住,不允許任何用戶互動。
偵測非數位輸入
為了避免此問題,偵測非數位輸入至關重要。一個簡單的方法是檢查 cin 是否處於失敗狀態。以下是範例:
if (cin.fail()) { cout << "ERROR -- You did not enter an integer"; // Clear the fail state and discard bad input cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
此程式碼檢查失敗狀態、顯示錯誤訊息並清除失敗狀態。對 cin.ignore() 的呼叫會丟棄輸入緩衝區中可能導致錯誤的任何剩餘字元。
其他注意事項
對於更複雜的驗證要求,它首先將輸入作為字串讀取,然後執行額外的檢查以確保其符合預期的格式可能是有益的。這可以在處理輸入驗證方面提供更大的靈活性和自訂性。
以上是為什麼 cin 輸入非數字值時會導致無限循環?的詳細內容。更多資訊請關注PHP中文網其他相關文章!