Maison >développement back-end >C++ >Comment éviter les boucles infinies lors de la saisie de valeurs non numériques en C ?

Comment éviter les boucles infinies lors de la saisie de valeurs non numériques en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-13 12:45:10315parcourir

How to Prevent Infinite Loops When Inputting Non-Numeric Values in C  ?

Boucle infinie lors de la saisie d'une lettre au lieu d'un chiffre

Lorsque vous rencontrez une saisie de caractère plutôt qu'un nombre entier, le code fourni tombe dans un boucle infinie tout en affichant le message "Le nombre que vous avez entré est négatif. Veuillez saisir un nombre positif pour continuer." Cela se produit pour les raisons suivantes :

Problème :

Le flux cin n'est pas correctement géré lorsqu'il rencontre une entrée non valide (un caractère dans ce cas). Il laisse le flux dans un état erroné, connu sous le nom d'indicateur « failbit ».

Solution :

Pour résoudre ce problème, suivez les étapes suivantes :

  • Vérifiez la réussite de la saisie lors de la lecture du numéro (en utilisant cin avec l'opérateur de manipulation de flux >>):

    while (!(cin >> num1)) {
        cout << "Incorrect input. Please try again.\n";
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
  • Effacez le flux et ignorez les caractères d'entrée erronés si cin échoue (en utilisant clear() et ignore()) :

    • cin.clear() efface le "failbit" flag.
    • cin.ignore(numeric_limits::max(), 'n') supprime tous les caractères du tampon de flux jusqu'au caractère de nouvelle ligne suivant ('n') inclus.

En mettant en œuvre ces étapes, le programme détectera l'entrée non valide, effacera le flux et invitera l'utilisateur à saisir un message positif. entier, permettant au programme de continuer sans boucle infinie.

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