0

。という名前の整数変数がありますi

から読むときcin

cin >> i;

ユーザー入力が文字だけでなく有効な整数であることを確認するにはどうすればよいですか?

4

1 に答える 1

1

最後の(セットの)入力が成功したかどうかを確認できます

if (cin) { /* still good */ }

また

if (cin.good()) { /* still good */ }

入力を取得して、成功を一度に確認することもできます。

if (cin >> i) { /* still good */ }

これらの方法にはすべて1つの欠点があります。それは、問題のある入力が削除されず、cin刈り込みが多いことを伝える方法がないことです。

ユーザー入力を取得して検証するためのより堅牢な方法は、最初に入力行を文字列に読み込み、次にその文字列から情報を抽出することです。例えば:

string line;
int i;
if (getline(cin, line))
{
  stringstream ss(line);
  if (ss >> i)
  {
    /* we have got our int */
  }
  else
  {
    /* That was not an integer entered by the user */
  }
}
else
{
  /* The user did not enter anything */
}
于 2013-01-07T18:30:48.650 に答える