Maison >développement back-end >C++ >Comment éviter les boucles infinies lors de la saisie d'entiers en 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 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!