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; }
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!