Maison > développement back-end > C++ > Pourquoi mon programme C entre-t-il dans une boucle infinie avec une entrée non numérique ?

Pourquoi mon programme C entre-t-il dans une boucle infinie avec une entrée non numérique ?

Mary-Kate Olsen
Libérer: 2024-12-10 10:18:11
original
206 Les gens l'ont consulté

Why Does My C   Program Enter an Infinite Loop with Non-Numeric Input?

Pourquoi le programme boucle-t-il sans fin lors de la saisie d'une lettre au lieu d'un chiffre ?

Lorsque vous essayez de saisir un entier positif dans un programme C mais en entrant accidentellement une lettre à la place, une boucle infinie peut se produire. Ce comportement découle de la façon dont le flux d'entrée cin traite les caractères.

Lorsque l'entrée est incorrecte (par exemple, une lettre au lieu d'un chiffre), le flux cin définit l'indicateur de bit d'échec et laisse l'entrée incorrecte dans le tampon. Les tentatives ultérieures de lecture d'un entier à l'aide de cin continueront de renvoyer une entrée incorrecte, ce qui entraînera une boucle sans fin.

Pour résoudre ce problème, il est crucial de gérer correctement les entrées incorrectes en recherchant les erreurs et en effaçant le tampon d'entrée. Voici une version modifiée du code qui inclut la gestion des erreurs :

#include <iostream>
#include <limits>

int main()
{
    // Define variables
    int num1, num2, total;
    char answer1;

    do
    {
        // User enters a number
        cout << "\nPlease enter a positive number and press Enter: ";
        while (!(cin >> num1))
        {
            cout << "Incorrect input. Please try again." << endl;
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }
        if (num1 < 0) cout << "The number you entered is negative. Please enter a positive number to continue." << endl;
    } while (num1 < 0);

    // Rest of the code goes here

    return 0;
}
Copier après la connexion

Dans ce code mis à jour, la boucle while (!(cin >> num1)) s'exécute jusqu'à ce qu'un entier valide soit saisi. Lorsqu'une entrée incorrecte est détectée, un message d'erreur s'affiche et le tampon d'entrée est effacé à l'aide de cin.clear() et cin.ignore(). Cela garantit que le programme peut continuer à lire correctement les entrées après avoir traité l'erreur.

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