標準ライブラリは、標準入力から入力された文字をフィルタリングするものを提供していません。そのようなライブラリを使用できると思いますcurses
。
ただし、できることは、入力が成功したかどうかを確認することです。operator>>
forは、整数を抽出できなかった場合 (たとえば、またはそのようなものに遭遇した場合) にint
ストリームの状態を設定します。次のようなブールコンテキストで抽出演算子を使用できます。failbit
'a'
cout << "Player 1 please enter the value of the row you would like to take ";
while (!(cin >> row) || (row < 0 || row > 3)) {
cout << "Invalid input, try again!\n";
// clear the error flags and discard the contents,
// so we can try again
cin.clear();
cin.ignore(std:numeric_limits<std::streamsize>::max(), '\n');
}
たとえば を入力する1abc
と、読み取りは正常に読み取られ、ストリームに1
残されることに注意してください。abc
これは、望ましい動作ではない可能性があります。それをエラーとして扱いたい場合は、次のように言うことができます
if ((cin >> std::ws).peek() != EOF) { /* there's more input waiting */ }
それに応じて行動するか、値を取得したらストリームからすべてを無条件に無視します。