Maison > développement back-end > C++ > Pourquoi la saisie de lettres provoque-t-elle une boucle infinie dans mon programme C ?

Pourquoi la saisie de lettres provoque-t-elle une boucle infinie dans mon programme C ?

DDD
Libérer: 2024-12-04 02:37:11
original
387 Les gens l'ont consulté

Why Does Letter Input Cause an Infinite Loop in My C   Program?

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);
Copier après la connexion

Dans ce code modifié :

  • La boucle while a été encapsulée dans une boucle do-while, garantissant au moins une exécution même si l'entrée initiale n'est pas valide.
  • À l'intérieur de la boucle interne, la validation appropriée des entrées est implémentée à l'aide de cin.fail() fonction.
  • Si une entrée non valide est détectée, un message d'erreur s'affiche et le tampon cin est effacé et ignoré pour l'empêcher d'affecter les tentatives de saisie ultérieures.
  • L'utilisateur est ensuite invité à re -entrez un entier valide.
  • Ce processus se poursuit jusqu'à ce que l'utilisateur entre un entier positif.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal