cin pour un int de l'entrée d'un char causes de la Boucle qui est censé vérifier l'entrée d'aller sauvage
C'est une fonction de mon jeu, il vous sera demander pour l'entrée et la cin en "iAuswahl"!
Puis la boucle while est vérifie si c'est une des Valeurs que je veux 1-9, si non, elle s'active et est censé demander pour la nouvelle entrée. Sorcière pour int.
Mais si je saisie un char comme r il va devenir fou et juste continuer à me redonner de cout et de sauter la cin!
Mes questions sont pourquoi faut-il faire et comment dois-je l'arrêter?
void zug(string sSpieler, int iDran){
int iAuswahl;
char cXO = 'O';
if (iDran == 1)
{
cXO = 'X';
}
cout << sSpieler << ", Sie sind am Zug. Bitte waehlen sie eins der Felder.\n" << endl;
grafik();
cout << "Sie sind >> " << cXO << " <<." << endl;
cin >> iAuswahl;
cout << endl;
while (
iAuswahl != 1
&& iAuswahl != 2
&& iAuswahl != 3
&& iAuswahl != 4
&& iAuswahl != 5
&& iAuswahl != 6
&& iAuswahl != 7
&& iAuswahl != 8
&& iAuswahl != 9
)
{
cout << "Kein gültiges Feld bitte wählen sie noch einmal!\n" << endl;
cin >> iAuswahl;
}
feldfuellen(iAuswahl, cXO);
}
OriginalL'auteur Jens Krüger | 2013-08-23
Vous devez vous connecter pour publier un commentaire.
Lorsqu'une erreur se produit lors de la lecture à partir d'un flux, d'un indicateur d'erreur est défini et non plus la lecture est possible jusqu'à ce que vous désactivez les indicateurs d'erreur. C'est pourquoi vous obtenez une boucle infinie.
Aussi, il est faux d'utiliser les résultats de l'opération d'entrée si vous ne savez pas si la lecture a réussi dans la première place. Vous ne pouvez pas faire des hypothèses sur la valeur de
iAuswahl
. C'est un des plus souvent fait des erreurs par les débutants en utilisant ruisseaux. Toujours vérifier si l'opération d'entrée était ok. C'est plus facile à faire en utilisantoperator>>
booléennes contexte:Et, mon oh mon, cette ligne
peut être juste ceci:
Une bonne boucle pourrait ressembler à quelque chose comme ceci:
Vous devez inclure
<limits>
, désolé j'ai oublié de le mentionner.cin.ignore()
ignore uniquement un caractère à la fois.Merci encore mais je n'arrive pas à obtenir de droit.... je veux les limites à la leght de l'entrée à droite? Comment dois-je faire? Si je l'ai mis trop longtemps, il ignors la prochaine entrées trop si son court-je obtenir plusieurs pistes à travers la boucle!
Avez-vous l'intention de taper plusieurs numéros à la fois? Comme
2 4 7
?Pas un seul nummber à un moment, mais si quelqu'un taper ins quelque chose comme "je déteste cette partie" cela va causer des problèmes si j'ai les limites de mal!
OriginalL'auteur jrok
Vous avez besoin pour effacer l'indicateur d'erreur après la lecture de mauvais type, sinon
cin
refusera de lire quoi que ce soit, comme il sera, dans l'état non valide. Aussi, vous aurez besoin d'ignorer ce caractère qui n'a pas été lu parcin
, car il va vous coincé dans une boucle pour toujours, car il va toujours essayer de lire à partir de ce caractère.Aussi,
peut être écrite comme
N'oubliez pas d'initialiser
iAushwahl
à0
, ou à une autre valeur, parce que si votrecin >> iAushwahl
échoue, vous pourrez lire la variable non initialisée.OriginalL'auteur Nemanja Boric
Si vous n'êtes pas à l'aide de votre iAuswahl variable pour faire toute sorte de mathématique, ce qui vous ne sont pas dans cette fonction, il suffit de faire de la variable une variable char, il n'y a pas de raison pour en faire une variable de type int si elle n'est pas de faire tout ce qui serait de demander à un int.
OriginalL'auteur jsmit42