Maison >développement back-end >C++ >Comment puis-je garantir uniquement la saisie numérique à l'aide du « cin » de C ?

Comment puis-je garantir uniquement la saisie numérique à l'aide du « cin » de C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-16 07:47:10776parcourir

How Can I Ensure Only Numeric Input Using C  's `cin`?

Amélioration de la validation des entrées : accepter uniquement les entrées numériques

Lorsque vous utilisez cin pour recevoir des entrées utilisateur, il est crucial de garantir l'exactitude des données, en particulier lors du traitement avec des valeurs numériques. Le code fourni rencontre un problème où les caractères non numériques, tels que « x » dans « 1x », sont ignorés, ce qui peut conduire à des résultats incorrects.

Une solution robuste

Pour résoudre ce problème, une approche plus approfondie consiste à utiliser std::getline et std::string pour capturer l'intégralité de la ligne d'entrée, y compris les caractères non numériques. L'extrait de code amélioré suivant illustre cette approche :

#include <string>
#include <sstream>

double enter_number()
{
    double number;
    std::string line;
    while (std::getline(std::cin, line)) {
        std::stringstream ss(line);
        if (ss >> number) {
            if (ss.eof()) { // Success
                break;
            }
        }
        std::cout << "Invalid input" << std::endl;
        std::cout << "Try again" << std::endl;
    }
    return number;
}

Expliquer l'implémentation

  • std::getline capture l'intégralité de la ligne d'entrée, y compris les espaces et les caractères spéciaux. caractères.
  • std::stringstream est utilisé pour convertir la ligne d'entrée en double type de données.
  • Le >> L'opérateur extrait la valeur numérique de la ligne d'entrée.
  • La vérification eof garantit que la ligne entière a été convertie avec succès en double avant de quitter la boucle.
  • Conclusion

    Avec cette approche améliorée, toute tentative de saisie de caractères non numériques sera signalée comme une saisie non valide et l'utilisateur sera invité à entrez à nouveau un numéro valide. Cette solution résout efficacement le problème présenté dans le code d'origine, garantissant que seules les entrées numériques valides sont acceptées, quels que soient les caractères non numériques supplémentaires dans la ligne de saisie.

    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