ホームページ > バックエンド開発 > 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 が数値以外の入力に遭遇すると失敗状態になり、それ以上の入力を求めるプロンプトを停止するためです。その結果、ループはユーザー操作を許可せずにスタックしたままになります。

非数値入力の検出

この問題を回避するには、非数値入力を検出することが重要です。簡単なアプローチの 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート