Maison > développement back-end > C++ > Pourquoi « cin » provoque-t-il des boucles infinies avec des incompatibilités de types ?

Pourquoi « cin » provoque-t-il des boucles infinies avec des incompatibilités de types ?

Mary-Kate Olsen
Libérer: 2024-12-26 09:25:09
original
403 Les gens l'ont consulté

Why Does `cin` Cause Infinite Loops with Type Mismatches?

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;
}
Copier après la connexion

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');
}
Copier après la connexion

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!

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