Comment gérer une mauvaise entrée de type de données
En C++, comment gérez-vous les entrées sont erronées? Comme, si le programme demande un entier, lorsque vous tapez un caractère, il devrait être capable de faire quelque chose et ensuite une boucle pour répéter l'entrée, mais la boucle est infinie lors de la saisie d'un caractère lors d'un entier est besoin et vice-versa.
source d'informationauteur Zik
Vous devez vous connecter pour publier un commentaire.
La raison pour laquelle le programme entre dans une boucle infinie est parce que
std::cin
's mauvaise entrée indicateur est défini en raison de l'entrée défaut. La chose à faire est d'effacer le drapeau et jeter le mauvais d'entrée de la mémoire tampon d'entrée.Voir le C++ FAQ pour cela, et d'autres exemples, y compris l'ajout d'un minimum et/ou maximum dans la condition.
Une autre façon serait d'obtenir l'entrée comme une chaîne de caractères et la convertir en un nombre entier avec
std::stoi
ou d'une autre méthode qui permet de vérifier la conversion.Haut voté réponse couvre la solution vraiment bien.
En plus de cette réponse, cela peut aider à visualiser ce qui se passe un peu mieux:
Dumping le texte dans la mémoire tampon à une variable n'est pas particulièrement utile, cependant il permet de visualiser pourquoi
cin.ignore()
est nécessaire.J'ai noté le changement de la variable d'entrée ainsi parce que si vous utilisez une variable d'entrée dans votre état pour un
while
boucle, ou une instruction switch, il peut aller dans l'impasse, ou de remplir une condition que vous n'attendiez pas, qui peut être source de confusion pour le débogage.Test de l'entrée pour voir si oui ou non c'est ce que votre programme s'attend. Si elle n'est pas, de signaler à l'utilisateur que les données d'entrée fournies par lui sont inacceptables.
Vous pouvez le vérifier grâce à la valeur ASCII si la valeur ascii s entre 65 t0 90 ou 97 à 122 de la il serait de caractère.