Maison >développement back-end >C++ >Comment faire en sorte que `cin` accepte uniquement la saisie numérique en C ?

Comment faire en sorte que `cin` accepte uniquement la saisie numérique en C ?

DDD
DDDoriginal
2024-12-17 07:34:25617parcourir

How to Make `cin` Accept Only Numerical Input in C  ?

Créer des nombres en lecture seule avec cin

Appliquer la saisie numérique à l'aide de cin peut présenter des défis, en particulier lors de la gestion de types d'entrée mixtes. Cet article étudie une solution pour garantir que cin n'accepte que les valeurs numériques.

Dans le code fourni, les boucles while tentent de rectifier les entrées invalides en ignorant les caractères non numériques. Cependant, cette méthode est confrontée à des limites lorsqu'elle traite plusieurs entrées.

Solution : Utiliser std::getline et std::string

Pour surmonter cet obstacle, nous pouvons utiliser une approche plus complète :

  1. Lisez la ligne entière en utilisant std::getline() : Ceci lit la ligne complète de saisie utilisateur sous forme de chaîne.
  2. Convertissez la chaîne en double à l'aide de std::stringstream :

    • Créez un flux de chaînes ss à partir de la ligne d'entrée.
    • Tentative d'extraire un double en utilisant le bouton >> opérateur.
  3. Valider la conversion :

    • Vérifier si la conversion est réussie et si le flux est arrivé à la fin de la chaîne (eof()).
    • En cas de succès, quittez la boucle. Sinon, affichez un message d'erreur.

Voici un exemple d'implémentation :

#include <sstream>
#include <string>

int main()
{
    std::string line;
    double d;
    while (std::getline(std::cin, line))
    {
        std::stringstream ss(line);
        if (ss >> d)
        {
            if (ss.eof())
            {   // Success
                break;
            }
        }
        std::cout << "Error!" << std::endl;
    }
    std::cout << "Finally: " << d << std::endl;
}

Cette solution garantit que les nombres entiers et les nombres à virgule flottante sont traités correctement , les caractères non numériques étant complètement supprimés.

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