[英]Cout in function prints too many times in C++
我試圖使用C ++編寫一個基本的游戲,只是為了擴展我對語言的理解。 我有以下代碼,當用戶輸入無效答案時,他們將被要求重試。
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:
將輸出與輸入字母數相同的次數...
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 ++的豐富經驗,如果您對通用代碼有任何建議,我將不勝感激。
在while循環中僅使用cin.clear()。
while (!(cin >> x) || x > 9 || x < 1 || board[x] == 'X' || board[x] == 'O'))
{
cin.clear();
cout << " Invalid input. Try again: ";
}
cout << " Please make your move, " << mark << ":" << endl;
int x = 0;
while (true)
while (!(cin >> x)) {
cin.clear();
cin.ignore();
cout << "Please provide a valid number in range 1 - 9. Try again: ";
}
if (x < 1 || x > 9) {
cout << "value out of range 1 - 9"
continue;
}
if (board[x] != 'X' && board[x] != 'O') {
break;
}
cout << "Cant make a move at " << x << " occupied by: " << board[x];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.