Comprendre les boucles infinies avec cin lorsque le type ne correspond pas
Lors de l'utilisation de la fonction cin pour lire l'entrée, une boucle infinie peut se produire si l'entrée attendue est numérique mais les caractères sont saisis à la place. Cela se produit parce que cin échoue lorsqu'il rencontre une entrée non numérique et entre dans l'état d'échec, l'empêchant de demander une entrée supplémentaire.
Causes de la boucle infinie
Dans le code fourni :
unsigned long ul_x1, ul_x2; while (1) { cin >> ul_x1 >> ul_x2; cout << "ux_x1 is " << ul_x1 << endl << "ul_x2 is " << ul_x2 << endl; }
Si une entrée non valide est fournie, cin échoue et reste dans cet état. En conséquence, la boucle n'entre jamais dans le bloc où cin lit à nouveau l'entrée, provoquant une boucle infinie.
Prévenir les boucles infinies
Pour éviter ce problème, on peut valider entrée en utilisant l'état d'échec de cin :
if (cin.fail()) { cout << "ERROR -- You did not enter an integer"; // Clear fail state and discard bad input cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
Alternative : basée sur une chaîne Validation
Pour une validation plus complexe, il peut être avantageux de lire l'entrée sous forme de chaîne avant d'effectuer des vérifications spécifiques basées sur la chaîne pour garantir qu'elle répond au format attendu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!