0

とにかく整数に文字が入力されるのを止める方法があるのだろうかと思っていました。これが私のintmainで使用しているコードです。

do
{
    cout << "Player 1 please enter the value of the row you would like to take ";
    cin >> row;
}while (row != 0 && row != 1 && row != 2 && row != 3);

このコードに関する私の問題は、ユーザーが文字を入力すると、無限ループが発生することです。どんな助けでも大歓迎です。

4

2 に答える 2

4

標準ライブラリは、標準入力から入力された文字をフィルタリングするものを提供していません。そのようなライブラリを使用できると思います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 */ }

それに応じて行動するか、値を取得したらストリームからすべてを無条件に無視します。

于 2013-03-03T11:09:03.943 に答える
1

文字を 1 つずつ取得し、数字の文字のみを文字列に追加します。使用する

cin.get();

ループで。

于 2013-03-03T11:08:31.120 に答える