首頁 >後端開發 >C++ >為什麼 `cin` 會導致類型不符的無限循環?

為什麼 `cin` 會導致類型不符的無限循環?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-26 09:25:09432瀏覽

Why Does `cin` Cause Infinite Loops with Type Mismatches?

當類型不匹配時理解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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn