J'ai un problème avec le code suivant. Je l'utilise dans Xcode (OS X).Comment réinitialiser std :: cin en l'utilisant?
[enlevé mon premier essai de ce code]
Comment entrée de remise std :: cin? J'essaie d'entrer une autre valeur mais je ne peux pas parce que std :: cin ne semble plus fonctionner après ma mauvaise valeur.
UPD2 Dans mon deuxième essai, j'utilise ce code:
for (unsigned char i = 0; i < 5; i++) {
int value = 0;
std::cout << "\n>> Enter \"value\": ";
std::cin >> value;
if (std::cin.fail()) {
std::cin.clear();
std::cin.ignore();
std::cout << "Error: It's not integer value!\n";
} else {
std::cout << "The value format is ok!\n";
}
std::cout << "value = " << value << std::endl;
}
Ici je viens entrée 5 valeurs dans une boucle. Chaque fois que je le vérifie en cas d'erreur. Quand je mets la mauvaise valeur ("asdf"), std :: cin devient fou et ne fonctionne plus. Je reçois cette sortie:
>> Enter "value": 4
The value format is ok!
value = 4
>> Enter "value": 234
The value format is ok!
value = 234
>> Enter "value": asdfghjkl
Error: It's not integer value!
value = 0
>> Enter "value": Error: It's not integer value!
value = 0
>> Enter "value": Error: It's not integer value!
value = 0
234
234
78
345
657
345
dsf
f
réponse est mis à jour @Galik –
'clear' vide drapeaux d'état d'erreur du flux. Ça ne fait rien avec les personnages. Et 'ignorer' sans arguments ne fera qu'écarter un seul caractère, ce qui signifie que si vous entrez' "asdf" ', il passera en boucle 4 fois, vous disant que votre entrée est mauvaise avant de vous permettre d'entrer à nouveau. Vous devriez faire 'std :: cin :: ignore (std :: numeric_limits :: max(), '\ n')' pour les supprimer jusqu'à la fin de la ligne. –
@BenjaminLindley - J'ai un problème avec "std :: cin :: ignore". J'utilise CLang et il semble qu'il devrait être std :: cin.ignore mais avec un seul param ... – JavaRunner