Maison >développement back-end >C++ >Comment gérer une saisie de type de données incorrecte et éviter les boucles infinies en C ?

Comment gérer une saisie de type de données incorrecte et éviter les boucles infinies en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-09 17:46:11181parcourir

How to Handle Incorrect Data Type Input and Avoid Infinite Loops in C  ?

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

En C, une entrée de type de données incorrect peut conduire à des boucles infinies lorsque le programme ne parvient pas à traiter l'entrée du type attendu. Par exemple, si un entier est demandé mais qu'un caractère est saisi, le programme peut entrer dans une boucle de saisie sans fin.

Solution :

Le problème sous-jacent est le réglage de le "drapeau d'entrée incorrecte" dans std::cin lorsque l'entrée n'adhère pas au type attendu. Pour résoudre ce problème :

  1. Effacez l'indicateur d'entrée incorrecte : Utilisez std::cin.clear() pour réinitialiser l'indicateur, indiquant que l'entrée est désormais acceptable.
  2. Supprimer les mauvaises entrées : Utilisez std::cin.ignore() pour supprimer les entrées incorrectes de l'entrée buffer.

L'extrait de code suivant illustre cette solution :

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

Cette boucle de code continue jusqu'à ce qu'une entrée valide soit fournie.

Alternativement, on peut obtenir une entrée sous forme de chaîne et convertissez-la en entier à l'aide de std::stoi ou de méthodes similaires permettant la validation de la conversion.

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