Problème de boucle infinie dans le programme C acceptant des lettres comme entrée entière
Ce problème survient lorsque le programme attend une entrée entière, mais que l'utilisateur entre une lettre à la place. Le programme entre dans une boucle infinie en raison d'un caractère inattendu dans le flux d'entrée. Cela entraîne l'affichage continu du message "Le nombre que vous avez saisi est négatif. Veuillez saisir un nombre positif pour continuer." sans donner à l'utilisateur la possibilité de saisir un numéro valide.
Explication
La raison sous-jacente de ce problème réside dans le comportement du flux d'entrée C. Lorsque l'utilisateur saisit un caractère non numérique, l'indicateur "failbit" du flux d'entrée est défini. Cependant, le flux n'est pas effacé, le programme reste donc bloqué dans la même itération de boucle, essayant de lire le caractère invalide à plusieurs reprises.
Solution
Pour résoudre ce problème , il est nécessaire de mettre en œuvre une validation d'entrée et une gestion des erreurs appropriées. Voici un exemple de la façon de résoudre ce problème :
#include <iostream> #include <limits> // ... (remaining code) cout << "\nPlease enter a positive number and press Enter: \n"; 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é :
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!