1. ホーム
  2. c++

[解決済み】なぜ、入力を読み込んだ後にcin.clear()とcin.ignore()を呼び出すのだろう?

2022-02-08 09:23:48

質問

Google Code UniversityのC++チュートリアル は、以前はこのようなコードでした。

// Description: Illustrate the use of cin to get input
// and how to recover from errors.

#include <iostream>
using namespace std;

int main()
{
  int input_var = 0;
  // Enter the do while loop and stay there until either
  // a non-numeric is entered, or -1 is entered.  Note that
  // cin will accept any integer, 4, 40, 400, etc.
  do {
    cout << "Enter a number (-1 = quit): ";
    // The following line accepts input from the keyboard into
    // variable input_var.
    // cin returns false if an input operation fails, that is, if
    // something other than an int (the type of input_var) is entered.
    if (!(cin >> input_var)) {
      cout << "Please enter numbers only." << endl;
      cin.clear();
      cin.ignore(10000,'\n');
    }
    if (input_var != -1) {
      cout << "You entered " << input_var << endl;
    }
  }
  while (input_var != -1);
  cout << "All done." << endl;

  return 0;
}

の意味は何ですか? cin.clear()cin.ignore() ? なぜ 10000\n パラメータは必要ですか?

解決方法は?

その cin.clear() のエラーフラグをクリアします。 cin (今後のI/O操作が正しく動作するように)そして、次に cin.ignore(10000, '\n') は次の改行までスキップします (数字以外のものが同じ行にあると無視するので、解析に失敗することはありません)。 スキップされるのは 10000 文字までなので、このコードではユーザーが非常に長い無効な行を入力しないことを想定しています。