Maison >développement back-end >C++ >Pourquoi les lettres provoquent-elles des boucles infinies dans les programmes de saisie de nombres C ?
Comprendre les boucles infinies lors de la saisie de lettres au lieu de chiffres
Lors de l'exécution d'un programme qui demande la saisie d'un nombre entier, il est courant de rencontrer une boucle infinie si un utilisateur saisit une lettre au lieu d'un chiffre. Ce problème survient en raison du fonctionnement de la gestion des entrées en C.
La cause profonde :
En C, la fonction cin est utilisée pour lire les entrées. Cependant, si des caractères non numériques sont saisis, cin ne parvient pas à extraire un entier valide. En conséquence, l'indicateur failbit est défini dans l'objet flux cin, indiquant une erreur.
Réparer la boucle infinie :
Pour résoudre la boucle infinie, nous avons besoin pour détecter et gérer le scénario d’entrée non valide. Voici une partie modifiée du code qui corrige ce problème :
#include <limits> // Includes numeric_limits for input validation // (...) Existing code // user enters a number cout << "\nPlease enter a positive number and press Enter: \n"; do { while (!(cin >> num1)) { cout << "Incorrect input. Please try again.\n"; // Clear the failbit and ignore the remaining input 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);
Explication :
Avec cette correction, le programme bouclera désormais uniquement lorsqu'un entier positif valide est entré, empêchant ainsi une boucle infinie due à une entrée invalide.
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!