Boucle infinie avec entrée et cin invalides
Lors de l'utilisation de cin pour lire l'entrée, une boucle infinie peut se produire si l'entrée n'est pas du type type attendu. Ce problème est particulièrement apparent lorsque vous tentez de saisir des chiffres mais que vous saisissez accidentellement des caractères.
Le problème provient de l'état d'échec dans lequel cin entre lorsqu'il rencontre une entrée non valide. Dans de tels scénarios, cin demandera une entrée, ce qui entraînera une boucle infinie.
Pour éviter ce comportement, une solution consiste à vérifier si cin est en état d'échec. Si c'est le cas, l'état d'échec est effacé et la mauvaise entrée est rejetée à l'aide de cin.ignore(). Cela permet à cin de revenir à son fonctionnement normal et de demander une entrée supplémentaire.
if (cin.fail()) { cout << "ERROR -- Invalid input detected" << endl; cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
Vous pouvez également utiliser std::getline() pour lire l'entrée sous forme de chaîne et effectuer des contrôles de validation plus sophistiqués avant d'essayer pour le convertir en nombre. Cette approche offre une plus grande flexibilité et permet une validation des entrées plus complexe.
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!