Maison >développement back-end >C++ >Comment puis-je empêcher les boucles infinies causées par une saisie de type de données incorrecte en C ?

Comment puis-je empêcher les boucles infinies causées par une saisie de type de données incorrecte en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-21 08:53:09285parcourir

How Can I Prevent Infinite Loops Caused by Incorrect Data Type Input in C  ?

Gestion des entrées de types de données incorrectes en C

Lors du développement de programmes C, il est essentiel d'assurer une gestion robuste des entrées utilisateur, en particulier lorsque l'on attend des types de données. Les entrées qui s'écartent du type attendu peuvent entraîner des dysfonctionnements du programme, tels que des boucles infinies.

Considérons un scénario dans lequel votre programme demande à l'utilisateur un nombre entier, mais celui-ci saisit par erreur un caractère. Si le programme ne parvient pas à gérer cette entrée invalide, il entrera dans une boucle infinie, demandant continuellement un entier malgré la réception d'un caractère.

La cause sous-jacente de ce problème est le paramètre "mauvaise entrée" de std::cin. " indicateur lorsqu'une entrée incorrecte est rencontrée. Pour résoudre ce problème, il est nécessaire d'effacer cet indicateur et de supprimer l'entrée défectueuse du tampon d'entrée.

L'extrait de code suivant illustre comment y parvenir :

while (std::cout << "Enter a number" && !(std::cin >> num)) {
    std::cin.clear(); // Clear bad input flag
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Discard input
    std::cout << "Invalid input; please re-enter.\n";
}

Dans ce code, le while la boucle s'exécute tant que l'entrée échoue (c'est-à-dire qu'aucun caractère n'a été lu). À l'intérieur de la boucle, cin.clear() efface l'indicateur d'entrée incorrecte et cin.ignore() supprime l'entrée incorrecte du tampon. Le programme invite ensuite l'utilisateur à saisir à nouveau un nombre valide.

Vous pouvez également obtenir l'entrée sous forme de chaîne et la convertir en entier à l'aide de std::stoi ou d'une autre méthode permettant la vérification de la conversion. Cette approche permet de vérifier le résultat de la conversion et de gérer les entrées non valides en conséquence.

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!

Déclaration:
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