Vérifier si l'utilsateur a entré un numéro [Résolu]

Signaler
Messages postés
22
Date d'inscription
samedi 10 mai 2008
Statut
Membre
Dernière intervention
22 septembre 2008
-
Messages postés
22
Date d'inscription
samedi 10 mai 2008
Statut
Membre
Dernière intervention
22 septembre 2008
-
salut,

je suis en train de réaliser un petit programme en C++ (une sorte de calculatrice). pour éviter des erreurs pendant l'exécution j'aimerai vérifier si l'utilisateur a entré un numéro ou un autre caractère. je veux pas faire un bloque try catch mais plutot un if (test), par exemple : if (is_numeric(valeur){}

je sais pas comment s'appelle la fonction de test en C++ et c'est pas évident de chercher une fonction pareille sur le net. merci d'avance.
A voir également:

7 réponses

Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Une petite fonction pour verifier que l'utilisateur a bien entrer un nombre:

BOOL __stdcall IsNumeric(LPSTR lpsz)
{
LPSTR lptr;
lptr = lpsz;
do
{
if( (*lptr < 48) || (*lptr > 57) ) return FALSE;
}while(*++lptr);
return TRUE;
}

Neo_Fr
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Un petit exemple:

char szNumber[32];
printf("Entrer un nombre: \n");
gets(szNumber);
if(IsNumeric(szNumber)) printf("La chaine est valide\n");
else printf("La chaine contient des caracteres non valide\n");

Neo_Fr
Messages postés
22
Date d'inscription
samedi 10 mai 2008
Statut
Membre
Dernière intervention
22 septembre 2008

je regroupe ici la fonction et l'exemple de Neo_fr au cas où quelqu'un cherche la même chose :

//merci Neo

#include
#include <windows.h>

using namespace std;

BOOL __stdcall IsNumeric(LPSTR lpsz);

int main()
{
    char szNumber[32];
    printf("Entrer un nombre: \n");
    gets(szNumber);
    if(IsNumeric(szNumber)) printf("La chaine est valide\n");
      else printf("La chaine contient des caracteres non valide\n");

    return 0;
}

BOOL __stdcall IsNumeric(LPSTR lpsz)
{
    LPSTR lptr;
    lptr = lpsz;
    do
    {
        if( (*lptr < 48) || (*lptr > 57) ) return FALSE;
    }while(*++lptr);
    return TRUE;
}
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

Bin la fonction de test tu la donne : IF... Oo

Ta calculatrice est faite comment : console? ou IHM?
Messages postés
22
Date d'inscription
samedi 10 mai 2008
Statut
Membre
Dernière intervention
22 septembre 2008

mon application est de type console, par exemple si tu tapes 1 + 1 ça donne 2 sans problème. maintenant si l'utilisateur entre un caractère sans faire attention comme 'a' (par exemple) au lieu d'un nombre, je veux que le programme affiche un message d'erreur en disant à l'utilisateur : "erreur : essaye de taper un numéro..."
je fais comment pour tester la valeur entrée ? y-a-t-il un moyen simple avec C++ parce que je suis débutant ?

mon code est le suivant (il marche bien, je veux ajouter une fonction de test):

#include

using namespace std;

void CalculateNumbers();

int main()
{
    CalculateNumbers();
    return 0;
}

void CalculateNumbers()
{
    char cCommand = 'c';
    char cOperator = '+';
    int iNumber1 = 0;
    int iNumber2 = 0;
    int iTotal = 0;

    system("CLS");
    cout << "Program that calculate two numbers" << endl << endl;
    cout << "c : start calculate" << endl;
    cout << "x : exit program" << endl;
    cin >> cCommand;

    switch (cCommand)
    {
        case 'c':
            cout << "Your are choosing a calculate procedure" << endl;
            cout << "Enter number 1: ";
            cin >> iNumber1;
            cout << "Enter number 2: ";
            cin >> iNumber2;
            cout << "Type of operation : ";
            cin >> cOperator;

            switch (cOperator)
            {
                case '+':
                    iTotal = iNumber1 + iNumber2;
                    cout << iNumber1 << " + " << iNumber2 << " = " << iTotal << endl;
                    break;
                case '-':
                    iTotal = iNumber1 - iNumber2;
                    cout << iNumber1 << " - " << iNumber2 << " = " << iTotal << endl;
                    break;
                case '*':
                    iTotal = iNumber1 * iNumber2;
                    cout << iNumber1 << " * " << iNumber2 << " = " << iTotal << endl;
                    break;
                case '/':
                    iTotal = iNumber1 / iNumber2;
                    cout << iNumber1 << " / " << iNumber2 << " = " << iTotal << endl;
                    break;
            }//switch2

            system("PAUSE");
            CalculateNumbers();
            break;
        case 'x':
            break;

        default:
            cout << "error : command is not correct, chose one from a list !" << endl;
            system("PAUSE");
            CalculateNumbers();
            break;
    }//switch1

}
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

Il faudrait que tu test les nombres au moment ou l'utilisateur les rentres,
switch (cCommand)
{
case 'c':
cout << "Your are choosing a calculate procedure" << endl;
cout << "Enter number 1: ";
cin >> iNumber1;
IF(iNumber1...)
{
}
cout << "Enter number 2: ";
cin >> iNumber2;
IF(iNumber2...)
{
}
cout << "Type of operation : ";
cin >> cOperator;

Pour ce que tu dois mettre dedans je suis plus sur du tout et j'aimerais pas t'induire en erreur, si je me souvien je reposterai en attendant bon courage^^
Messages postés
22
Date d'inscription
samedi 10 mai 2008
Statut
Membre
Dernière intervention
22 septembre 2008

justement faucheuse, ce qui m'intéresse c'est ce qu'il y a dans l'expression de test du if. je pense qu'on vb (ça fait longtemps que j'ai pas utilisé le vb) on écrit : if (isNumeric(valeur)) then... là, je suis encore débutant en C++ et j'arrive pas à trouver la fonction. je vais voir la solution de Neo_fr pour voir ce que ça donne, même si je comprends pas grand chose.