Boucle infinie avec cin lors de l'attente d'une saisie numérique avec saisie de caractères
Le code en question implique une boucle infinie avec cin lorsque des caractères sont saisis à la place des nombres attendus.
Explication d'Infinite Loop
Lorsque cin rencontre une entrée non numérique, il entre dans l'état d'échec et cesse de demander à la ligne de commande une entrée supplémentaire. Cela entraîne la poursuite de l'exécution de la boucle sans aucune interaction de l'utilisateur.
Détection des entrées invalides avec cin
Pour éviter ce problème et détecter les entrées invalides, vous pouvez vérifier si cin est en état d'échec en utilisant :
if (cin.fail()) { // Handle invalid input here }
Si l'état d'échec est rencontré, vous pouvez l'effacer et supprimer la mauvaise entrée using :
cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Cela réinitialise cin à un état de fonctionnement, vous permettant de continuer à demander une saisie.
Pour une validation plus sophistiquée, vous pouvez utiliser un flux d'entrée de chaîne pour vérifier le caractère saisi par caractère et effectuer une validation plus avancée.
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!