Maison > développement back-end > C++ > le corps du texte

Comment valider la saisie numérique en C au-delà de « atoi() » ?

Linda Hamilton
Libérer: 2024-11-21 21:01:12
original
161 Les gens l'ont consulté

How to Validate Numeric Input in C   Beyond `atoi()`?

Validation de la saisie numérique en C

Dans un programme qui traite la saisie de nombres entiers, il est crucial de s'assurer que les utilisateurs fournissent des nombres valides. Malheureusement, la fonction atoi() ne suffit pas lorsqu'il s'agit d'entiers à plusieurs chiffres. Cet article explore des méthodes alternatives pour vérifier l'entrée numérique.

Utilisation du failbit

Le flux d'entrée de C (cin) définit le failbit lorsqu'il rencontre une entrée qu'il ne peut pas analyser. Cela peut être exploité pour valider l'entrée comme suit :

int n;
cin >> n;
if(!cin) {
    // User did not input a number
    cin.clear();
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
Copier après la connexion
  • if(!cin) vérifie si le bit d'échec est défini.
  • cin.clear() réinitialise l'état du flux.
  • cin.ignore() ignore l'entrée invalide, permettant re-saisie.

Gestion du débordement d'entrée

Lorsque les nombres entiers dépassent la valeur maximale autorisée, cin définit également le bit d'échec. Pour éviter cela, vérifiez l'état du flux avant de lire l'entrée :

while(!cin.eof()) {
    int n;
    cin >> n;
    if(!cin) {
        // Input error occurred
        cin.clear();
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    else {
        // Valid input
        process(n);
    }
}
Copier après la connexion

Cette boucle continue de lire et de valider l'entrée jusqu'à ce que la fin du fichier (EOF) soit atteinte.

Autre Alternatives

  • Stringstream de C 11 : Créez un stringstream à partir de l'entrée et essayez de le convertir en nombre entier.
  • Expressions régulières (regex) : Utilisez des expressions régulières pour appliquer un format numérique spécifique.
  • Boost des bibliothèques : Utilisez boost::regex ou boost::lexical_cast de Boost pour la validation des entrées.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal