HOWTO · C++

C++ を使用した While ループでの文字入力

C++ の while ループで入力を取得するためのクイック ガイド。

この簡単なガイドでは、C++ での入力の処理について説明します。 さらに、ユーザーによる無効な入力への取り組みの問題を検討します。 最後に、while ループを使用してユーザーから入力を取得する方法について説明します。

まず、C++ でユーザーから入力データを取得する手順を知っておく必要があります。 C++ の iostream ライブラリは、関数 cin を提供します。 ユーザーからの入力を受け取り、使用される変数に値を格納します。

コード例:

int x;
cin >> x;

このコードでは、x は 1 行目で宣言された integer 変数であり、入力は 2 行目で取得されます。cin は、ユーザーにデータを入力し、そのデータを変数 x に保存するように促します。 この値は integer 値でなければなりません。 それ以外の場合、値は x に部分的に保存されるか、保存されません。

C++ の cin 関数で while ループを使用する

ユーザーが無効なデータを入力するまで複数の入力を取得する別の例を考えてみましょう。 無効なデータが入力された場合は、入力を閉じる必要があります。

コード:

int main() {
  int a;
  ;
  while (cin >> a) {
    cout << "You entered the correct input value" << endl;
  }
  cout << "Sorry, you have entered wrong type of data." << endl;
}

出力:

while cin を使用して、ユーザーが無効なデータを入力するまで複数の入力を取得します

ユーザーは値を入力するように求められ、値 2 を入力しました。これは int 値です。 そのため、ループが繰り返され、再びユーザーにプロンプトが表示されます。

3 回試行した後、int 型ではないいくつかの文字 (つまり、abc) を入力しました。 これにより、標準入力ストリーム (cin に関連付けられている) が破棄され、式 cin >> afalse を返します。

したがって、ループが中断され、ループの外の行に制御が移ります。 この方法で無効なデータが入力されるのを制限できます。

次の例では、同じタスクを達成する別の方法を示します。

コード:

int main() {
  int a;
  ;
  while (cin) {
    cin >> a;
    cout << "You entered the correct input value" << endl;
  }
  cout << "Sorry, you have entered a wrong type of data." << endl;
}

cin には、goodbadfailEOF の 4つの状態があることを知っておく必要があります。 上記のコードを実行すると、cingood 状態になります。

cin をループ条件として使用しました。 コードが実行を開始すると、cin良い 状態になり、true を返します。

したがって、while ループが実行され、ユーザーは a の値を入力するように求められます。

出力:

while cin を使用して、ユーザーが無効なデータを入力するまで複数の入力を取得します 2

間違ったデータが入力されるとすぐに、ループはすぐには中断されませんが、1 回の反復後に中断されます。

cin に関連付けられた標準入力ストリームが エラー状態 になると、状態が 正常な状態 にリセットされない限り、それ以上の入力を受け取ることはできません。 cin.clear() 関数を使用して cin の無効な状態をクリアでき、cin.ignore(numeric_limits<streamsize>::max(), '\n') 関数を使用してクリアできます ストリームからの無効な入力。

これにより、実行を中断することなく、ユーザーからの入力を再取得できます。