J'essaie de faire un jeu de base en utilisant C++ juste pour élargir ma compréhension de la langue. J'ai le code suivant et quand l'utilisateur entre une réponse invalide ils seront invités à essayer à nouveau.Cout dans la fonction imprime trop de fois en 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);
}
Lorsque les entrées utilisateur disent « 123456 » la réponse serait:
Please make your move, X:
123456
Invalid input. Try again:
Maintenant, c'est-ce que je veux et va de même pour une seule lettre. Par exemple:
Please make your move, X:
a
Invalid input. Try again:
Mais lorsque les entrées utilisateur deux ou plusieurs lettres le Invalid input: Try again:
va imprimer le même nombre de fois que le nombre de lettres entrées ...
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:
Quelqu'un peut-il s'il vous plaît expliquer pourquoi? Je n'ai pas beaucoup d'expérience avec C++ et si vous avez des conseils pour le code général, j'apprécierais vos conseils.
'std :: getline' peut être utile. Et 'std :: cin.ignore()' n'ignore qu'un seul caractère selon [cplusplus] (http://www.cplusplus.com/reference/istream/istream/ignore/) et [cppreference] (http: // fr .cppreference.com/w/cpp/io/basic_istream/ignore). – user202729
cout << "\ n" << endl; pourquoi deux version –
@ user202729 Merci! –