cin と数値型エラーによる無限ループを理解する
一部のプログラミング シナリオでは、cin を使用して文字列を入力するときに無限ループ動作が発生する可能性があります。数値を期待している間。この記事では、この問題を詳しく掘り下げ、考えられる解決策を示します。
無限ループの説明
指定したループ:
while (1) { cin >> ul_x1 >> ul_x2; cout << "ul_x1 is " << ul_x1 << endl << "ul_x2 is " << ul_x2 << endl; }
は無限にループします。数字の代わりに文字が入力された場合は繰り返します。これは、cin が数値以外の入力に遭遇すると失敗状態になり、それ以上の入力を求めるプロンプトを停止するためです。その結果、ループはユーザー操作を許可せずにスタックしたままになります。
非数値入力の検出
この問題を回避するには、非数値入力を検出することが重要です。簡単なアプローチの 1 つは、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 中国語 Web サイトの他の関連記事を参照してください。