簡體   English   中英

Cout函數在C ++中打印太多次

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM