Vérifiez si l'entrée est un nombre ou une chaîne de caractères en C++

J'ai écrit le code suivant pour vérifier si l'entrée(answer3) est un nombre ou une chaîne de caractères, si ce n'est pas un nombre, il devrait revenir "Entrer Uniquement des Chiffres" mais ça revient au même pour les nombres. Merci de me suggérer une solution.

#include <iostream>
#include <string>
#include <typeinfo>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

using namespace std; 
int main ()
{

string ques1= "Client's Name :";
string ques2 = "Client's Address :";
string ques3 = "Mobile Number :";

char answer1 [80];
string answer2;
int answer3;

     cout<<ques1<<endl;    
     cin>>answer1;      

     cout<<ques2<<endl;    
     cin>>answer2; 

     cout<<ques3<<endl;
     cin>>answer3;

       if (isdigit(answer3))
       {
              cout<<"Correct"<<endl;     

              }

        else
        {
          cout<<"Enter Numbers Only"<<endl;  

            }

 system("pause>null");
 return 0;  

}
  • Est-il quelque chose de mal avec la touche entrée sur votre clavier? La barre d'espace semble douteux ainsi
  • isdigit prend un caractère unique comme un int, l'interprète comme un caractère ASCII, et retourne une valeur non nulle si c'est un chiffre ('0' à '9', ASCII 48 57) ou zéro si elle ne l'est pas. Il n'a aucun moyen de savoir si vous lisez un entier dans answer3.
  • De plus, cin >> someIntVariable les rejets principaux espaces, de lit un signe optionnel (- ou +), suivie par une séquence de chiffres, de s'arrêter à la première non-chiffre. Donc, si quelqu'un entre dans quelque chose qui ne peut pas être interprété, il définit la variable à 0. C'est pourquoi isdigit plus tard échoue.
  • Il ne fait pas de sens d'appeler isdigit sur un integer, sauf si vous savez précisément ce que cela signifie pour un nombre entier à un chiffre.
InformationsquelleAutor WESTRUK | 2014-02-16