Maison >développement back-end >C++ >Pourquoi « cin » provoque-t-il une boucle infinie avec une entrée non numérique ?

Pourquoi « cin » provoque-t-il une boucle infinie avec une entrée non numérique ?

DDD
DDDoriginal
2024-12-22 16:51:12761parcourir

Why Does `cin` Cause an Infinite Loop with Non-Numerical Input?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn