Vérifier si l'utilsateur a entré un numéro

Résolu
youri01 Messages postés 22 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 22 septembre 2008 - 11 juin 2008 à 12:28
youri01 Messages postés 22 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 22 septembre 2008 - 11 juin 2008 à 22:45
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.

7 réponses

Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
11 juin 2008 à 16:10
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
3
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
11 juin 2008 à 21:16
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
3
youri01 Messages postés 22 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 22 septembre 2008
11 juin 2008 à 22:45
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;
}
3
cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011
11 juin 2008 à 13:44
Bin la fonction de test tu la donne : IF... Oo

Ta calculatrice est faite comment : console? ou IHM?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
youri01 Messages postés 22 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 22 septembre 2008
11 juin 2008 à 13:58
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

}
0
cs_faucheuse Messages postés 308 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 27 octobre 2011
11 juin 2008 à 15:53
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^^
0
youri01 Messages postés 22 Date d'inscription samedi 10 mai 2008 Statut Membre Dernière intervention 22 septembre 2008
11 juin 2008 à 21:09
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.
0
Rejoignez-nous