首頁 > 後端開發 > C++ > 為什麼 cin 輸入非數字值時會導致無限循環?

為什麼 cin 輸入非數字值時會導致無限循環?

DDD
發布: 2024-12-30 19:35:14
原創
245 人瀏覽過

Why Does `cin` Cause Infinite Loops When Inputting Non-Numeric Values?

理解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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板