Maison >développement back-end >C++ >Comment valider la saisie numérique en C au-delà de « atoi() » ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-11-21 21:01:12315parcourir

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');
}
  • 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);
    }
}

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!

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