型が一致しない場合の cin の無限ループについて
cin 関数を使用して入力を読み取る場合、期待される入力が一致しない場合、無限ループが発生する可能性があります。は数値ですが、代わりに文字が入力されます。これは、cin が数値以外の入力に遭遇すると失敗して失敗状態になり、それ以上の入力を求めるプロンプトが表示されないために発生します。
無限ループの原因
提供されたコード:
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 中国語 Web サイトの他の関連記事を参照してください。