Maison >développement back-end >C++ >Comment éviter les boucles infinies lors de la saisie d'entiers en C ?

Comment éviter les boucles infinies lors de la saisie d'entiers en C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-03 04:23:10747parcourir

How to Prevent Infinite Loops When Taking Integer Input in C  ?

Problème de boucle infinie avec la saisie de caractères

Lors de l'exécution du code fourni, une boucle infinie se produit si un caractère non entier est saisi au lieu de un numéro. Ce comportement se produit lors du processus de vérification d'un nombre positif.

Plus précisément, le problème réside dans la boucle while interne qui vérifie la validité de num1. Si une lettre est saisie, le cin >> L'instruction num1 échoue, définissant l'indicateur failbit. Cependant, le tampon cin n'est pas effacé, ce qui conduit à supposer à tort que la même entrée non valide persiste.

Résoudre le problème

Pour résoudre ce problème, une logique supplémentaire est requis pour gérer les entrées non valides et effacer le tampon cin :

    do {    
        while(!(cin >> num1)) {
            cout << "Incorrect input. Please try again.\n";
            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.\n";
    } while(num1 < 0);

Dans ce code modifié, une boucle externe do-while est utilisée pour demander continuellement une entrée jusqu'à ce que un entier positif valide est saisi.

Après la saisie d'un caractère non valide, cin.clear() est appelé pour réinitialiser l'indicateur de bit d'échec. Par la suite, cin.ignore() est utilisé pour supprimer tous les caractères restants du tampon d'entrée, y compris le caractère invalide et tous les caractères d'espacement ou de nouvelle ligne qui peuvent suivre. L'argument numeric_limits::max() spécifie que tous les caractères jusqu'à la nouvelle ligne suivante sont ignorés.

Avec ces ajustements, le code garantit que seules les entrées entières valides sont traitées et que les boucles infinies sont évitées lorsqu'elles ne sont pas valides. des caractères entiers sont saisis.

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