Maison >développement back-end >C++ >Comment puis-je vérifier efficacement les entrées utilisateur entières en C ?

Comment puis-je vérifier efficacement les entrées utilisateur entières en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-07 02:47:14304parcourir

How Can I Effectively Verify Integer User Input in C  ?

Vérification des entrées utilisateur sous forme d'entiers

Énoncé du problème

Dans un programme C, il est crucial de garantir que les entrées utilisateur est au format attendu, notamment lors de l'exécution d'opérations mathématiques. Cet article explique comment déterminer si l'entrée fournie par l'utilisateur est un nombre entier. Si l'entrée n'est pas un nombre entier, le programme invitera l'utilisateur à saisir à nouveau un entier valide.

Solution

Il existe deux approches principales pour vérifier la saisie de l'utilisateur sous forme d'entier :

1. Utilisation de cin.fail() :

  • Lisez l'entrée en utilisant cin >>.
  • Vérifiez l'état du flux d'entrée en utilisant if (cin.fail() ).
  • Si cin.fail() est vrai, cela signifie que l'entrée n'est pas un entier.

2. Utilisation de std::getline et de la manipulation de chaînes :

  • Utilisez std::getline(std::cin, theInput) pour capturer l'entrée sous forme de chaîne.
  • Vérifiez le chaîne pour tout caractère qui n'est pas un nombre en utilisant if (theInput.find_first_not_of("0123456789") != std::string::npos).
  • Si la condition est vraie, cela signifie que l'entrée contient des caractères non numériques.

Implémentation

Vous trouverez ci-dessous un extrait de code qui implémente la manipulation std::getline et les chaînes approche :

#include <iostream>
#include <string>

int main() {

    std::string theInput;
    int inputAsInt;

    std::getline(std::cin, theInput);

    while(std::cin.fail() || std::cin.eof() || theInput.find_first_not_of("0123456789") != std::string::npos) {

        std::cout << "Error" << std::endl;

        if( theInput.find_first_not_of("0123456789") == std::string::npos) {
            std::cin.clear();
            std::cin.ignore(256,'\n');
        }

        std::getline(std::cin, theInput);
    }

    std::string::size_type st;
    inputAsInt = std::stoi(theInput,&amp;st);
    std::cout << inputAsInt << std::endl;
    return 0;
}

Ce code invite en permanence l'utilisateur à saisir un entier jusqu'à ce qu'un entier valide soit saisi. Il gère les situations dans lesquelles l'utilisateur saisit des caractères non numériques ou fournit une entrée vide.

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