Maison > développement back-end > C++ > Comment éviter les boucles infinies causées par une entrée invalide avec « cin » ?

Comment éviter les boucles infinies causées par une entrée invalide avec « cin » ?

Susan Sarandon
Libérer: 2024-12-31 14:48:12
original
502 Les gens l'ont consulté

How to Prevent Infinite Loops Caused by Invalid Input with `cin`?

Boucle infinie avec entrée et cin invalides

Lors de l'utilisation de cin pour lire l'entrée, une boucle infinie peut se produire si l'entrée n'est pas du type type attendu. Ce problème est particulièrement apparent lorsque vous tentez de saisir des chiffres mais que vous saisissez accidentellement des caractères.

Le problème provient de l'état d'échec dans lequel cin entre lorsqu'il rencontre une entrée non valide. Dans de tels scénarios, cin demandera une entrée, ce qui entraînera une boucle infinie.

Pour éviter ce comportement, une solution consiste à vérifier si cin est en état d'échec. Si c'est le cas, l'état d'échec est effacé et la mauvaise entrée est rejetée à l'aide de cin.ignore(). Cela permet à cin de revenir à son fonctionnement normal et de demander une entrée supplémentaire.

if (cin.fail()) {
  cout << "ERROR -- Invalid input detected" << endl;
  cin.clear();
  cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
Copier après la connexion

Vous pouvez également utiliser std::getline() pour lire l'entrée sous forme de chaîne et effectuer des contrôles de validation plus sophistiqués avant d'essayer pour le convertir en nombre. Cette approche offre une plus grande flexibilité et permet une validation des entrées plus complexe.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal