J'ai actuellement une fonction configurée qui demande à l'utilisateur une INT, obtient cela, puis vérifie que l'entrée répond à une certaine spécification. Dans ce cas, il s'attendait à ce que l'entrée soit un entier entre -10 et 100. Dors, si je saisis une chaîne de lettres par exemple. "GFUIWYDUF", la fonction renvoie une 0. Pourquoi cela se produit-il et comment puis-je le réparer?
3 Réponses :
Si vous jouez avec les valeurs d'entrée, vous trouverez que CIN >> scan de gauche à droite jusqu'à ce qu'il trouve une valeur non numérique. Il évalue ensuite les chiffres qu'il a trouvés. P>
Par exemple, mettant: p>
57GH5 P>
retourne 57 p>
Si vous ne saisissez que des caractères numériques, vous avez un score de 0. P>
Si vous CIN >> String à la place, vous pourrez analyser / valider la chaîne et convertir un nombre valide en int p>
Le problème est que votre boucle de validation pour ce type d'entrée dépend de l'état d'erreur de Le moyen le plus simple de résoudre ce problème est de déplacer votre lecture de std :: Cin Code>. Cependant, vous nettoyez cet état d'erreur avant la vérification de la boucle.
std :: Cin Code> à après le
Effacer () Comme ceci: P>
cin >> answer;
while(!cin || answer < -10 || answer > 100) {
cout << "Invalid Input!" << endl;
cout << "What is the answer?: " << endl;
cin.clear();
cin.ignore();
cin >> answer;
}
0 est renvoyé comme valeur initiale de Vous pouvez utiliser cin.fail () code> pour vérifier si l'entrée est valide. P> < Pré> xxx pré> p>
Ce n'est pas la valeur initiale - il n'y avait pas de valeur initiale. Le 0 est défini par Istream dans le cas d'une défaillance d'analyse.
cin.ignore () code> ignore 1 caractère, il serait préférable d'ignorer tout le reste de l'entrée
Lorsque
CIN >> Réponse code> rencontre un caractère qui ne peut pas être interprété comme une valeur
int code>, il cesse de lire et de retourner. Le caractère incriminé est laissé en entrée. Avant C ++ 11,
Réponse Code> a été laissé non modifié, car c ++ 11 il est réglé sur zéro. Mieux vaut lire un
std :: string code> à partir de
std :: Cin Code> Utilisation de
std :: getline () code> - alors vous pouvez vérifier la chaîne, décider S'il a une entrée qui représente une valeur
int code> (par exemple, des chiffres, des caractères de signe), supprimez tous les caractères étrangers, puis extrayez la valeur intégrale de la chaîne.