Maison > développement back-end > C++ > Pourquoi « cin » provoque-t-il des boucles infinies lors de la saisie de valeurs non numériques ?

Pourquoi « cin » provoque-t-il des boucles infinies lors de la saisie de valeurs non numériques ?

DDD
Libérer: 2024-12-30 19:35:14
original
245 Les gens l'ont consulté

Why Does `cin` Cause Infinite Loops When Inputting Non-Numeric Values?

Comprendre les boucles infinies avec les erreurs de type cin et numérique

Dans certains scénarios de programmation, nous pouvons rencontrer des comportements de boucle infinie lors de l'utilisation de cin pour saisir des chaînes en attendant des valeurs numériques. Cet article approfondit ce problème et propose des solutions possibles.

Explication de la boucle infinie

La boucle que vous avez fournie :

while (1)
{
  cin >> ul_x1 >> ul_x2;
  cout << "ul_x1 is " << ul_x1 << endl << "ul_x2 is " << ul_x2 << endl;
}
Copier après la connexion

sera sans fin itérer si des caractères sont saisis à la place des chiffres. En effet, lorsque cin rencontre une entrée non numérique, il entre dans un état d'échec et cesse de demander d'autres entrées. Par conséquent, la boucle reste bloquée sans permettre aucune interaction de l'utilisateur.

Détection des entrées non numériques

Pour éviter ce problème, il est crucial de détecter les entrées non numériques. Une approche simple consiste à vérifier si cin est en état d’échec. Voici un exemple :

  if (cin.fail())
  {
     cout << "ERROR -- You did not enter an integer";

     // Clear the fail state and discard bad input
     cin.clear();
     cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  }
Copier après la connexion

Ce code vérifie l'état d'échec, affiche un message d'erreur et efface l'état d'échec. L'appel à cin.ignore() élimine tous les caractères restants dans le tampon d'entrée qui pourraient avoir provoqué l'erreur.

Considérations supplémentaires

Pour des exigences de validation plus complexes, il Il peut être avantageux de lire d'abord l'entrée sous forme de chaîne, puis d'effectuer des vérifications supplémentaires pour garantir qu'elle correspond au format attendu. Cela peut offrir une plus grande flexibilité et personnalisation dans la gestion de la validation des entrées.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal