私はC言語を使って基本的なゲームを作ろうとしています。私は次のコードを持っています。ユーザーが無効な答えを入力すると、再度試してみるように求められます。Coutで関数Coutで何度でも何度も印刷されます
void turn_update()
{
player = (player % 2 == 0)? 1 : 2;
mark = (player == 1)? 'X' : 'O';
cout << " Please make your move, " << mark << ":" << endl;
int x = 0;
while(!(cin >> x) || x > 9 || x < 1 || board[x] == 'X' || board[x] == 'O')
{
cin.clear();
cin.ignore();
cout << " Invalid input. Try again: ";
}
cout << "\n" << endl;
board[x] = mark;
draw_board(board);
}
ユーザの入力が「123456」は、応答は次のようになり言う:
Please make your move, X:
123456
Invalid input. Try again:
今、それは私が欲しいものであり、同じは、単一の文字のために行きます。例えば:
Please make your move, X:
a
Invalid input. Try again:
しかし、時にユーザが入力Invalid input: Try again:
は、入力された文字の数と同じ回数をプリントアウトします2つの以上の文字...
Please make your move, X:
aa
Invalid input. Try again: Invalid input. Try again:
Please make your move, X:
aaa
Invalid input. Try again: Invalid input. Try again: Invalid input. Try again:
誰かが理由を説明していただけますか?私はC++に関する多くの経験がありません。一般的なコードについてのヒントがあれば、あなたのアドバイスに感謝します。
'のstd :: getline'は有用である可能性があります。そして 'std :: cin.ignore()'は[cplusplus](http://www.cplusplus.com/reference/istream/istream/ignore/)と[cppreference](http:// en)に従って1文字だけを無視します。 .cppreference.com/w/cpp/io/basic_istream/ignore)。 – user202729
cout << "\ n" << endl;なぜ2つのバージョン –
@ user202729ありがとう! –