IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Savoir si une variable est bien un chiffre


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 132
    Par défaut Savoir si une variable est bien un chiffre
    Je voudrais savoir comment je pourrais faire pour savoir si ma variable est bien un chiffre ?

    j'ai essayé la fonction isnumeric de la façon suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (IsNumeric(ma_variable))
    { faire_ceci; }
    mais cela ne fonctionne pas

    "request for member `IsNumeric' in something not a structure or union"

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    isdigit(var) déclaré dans ctype.h devrait faire l'affaire.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 132
    Par défaut
    Citation Envoyé par tomasi
    merci pour la précision mais cela ne fonctionne pas comme je le souhaite, en effet je dois vérifier dans le code suivant que la variable choix est bien un entier sinon j'obtiens une boucle infinie.

    Pour une raison inconnue le default du switch ne permet pas de gérer le cas ou on rentre autre chose qu'un entier au clavier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
     
    int menu(){ //affiche le menu et retourne l'entier du choix
     
        int choix;
     
         printf("Entrer le numéro de la commande\n");
         printf("1. Fin \n");
         printf("2. Insérer \n");
         printf("3. Rechercher \n");
         printf("4. Supprimer \n");
     
         if (isdigit(choix)){
           scanf("%d", &choix); 
         }
     
         return choix;
         }
     
    int main(){
     
        do{
           switch(menu()){
             case 1 : printf("Fin \n"); system("pause"); exit(1); break;
             case 2 : printf("2 \n"); break;
             case 3 : printf("3 \n"); break;
             case 4 : printf("4 \n"); break;
             default : printf("Commande non valide \n"); break;        
           }
         }
      while(1);
     
      system("pause");
     
      return EXIT_SUCCESS;
    }
    je précise que je suis sous dev c++

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par tomasi
    je précise que je suis sous dev c++
    Il suffit de tester la valeur retournée par scanf()

    http://xrenault.developpez.com/tutoriels/c/scanf/

    et d'agir en conséquence (purge)

    Sinon, une saisie avec fgets() évite ces ennuis de mauvaise utilisation de scanf() qui est difficile à utiliser correctement...

    Evidemment, c'est un peu plus complexe (saisie, nettoyage et purge, conversion, test des limites) mais une fois qu'on a mis tout ça dans une fonction, c'est fiable et c'est pour la vie...

    Et comme il faut faire la même chose avec les saisies de chaines, on peut récupérer une partie du travail pour faire la saisie de nombres...

    Bref, c'est l'occasion d'apprendre à coder correctement en se fabriquant ses outils qui seront toujours meilleurs que ceux qu'on achète tout faits... C'est ça l'esprit artisan...

    "Le code bio, c'est meilleur que le code industriel"

    J'ai dit.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 132
    Par défaut
    je ne comprends pas bien comment tester la valeur de retour de scanf()

    en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if ( scanf("%d", &choix))
           scanf("%d", &choix);
    ?

    et ensuite "purger" ?
    là je suis complètement perdu

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par tomasi
    je ne comprends pas bien comment tester la valeur de retour de scanf()

    en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if ( scanf("%d", &choix))
           scanf("%d", &choix);
    ?

    et ensuite "purger" ?
    là je suis complètement perdu
    Tu n'as donc pas lu l'article dont je t'ai passé le lien ? Ca ne tombe du ciel tout ça, il faut faire un effort de documentation, de recherche et d'apprentissage...

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par tomasi
    Je voudrais savoir comment je pourrais faire pour savoir si ma variable est bien un chiffre ?

    j'ai essayé la fonction isnumeric de la façon suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (IsNumeric(ma_variable))
    { faire_ceci; }
    mais cela ne fonctionne pas

    "request for member `IsNumeric' in something not a structure or union"
    Déjà, commence par vérifier que tu compiles bien en C, parce que cette erreur est plutôt étrange... L'extension du fichier doit être .c et non .cpp ni .C.

    Ensuite, cette fonction IsNumeric() n'est pas standard. Si ma_variable contient la valeur d'un caractère, tu peux utiliser la fonction standard isdigit() de <ctype.h> qui est faite pour ça.

    Enfin, en C, IsNumeric est différent de isnumeric. En effet, le C est sensible à la casse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/10/2006, 10h55
  2. Réponses: 3
    Dernier message: 12/10/2006, 16h39
  3. Réponses: 3
    Dernier message: 28/07/2006, 15h45
  4. [ImageMagick] Savoir si une URL est bien une image
    Par Oberown dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 18/01/2006, 23h13
  5. Comment savoir si une variable est initialisée ?
    Par nabix dans le forum Général Python
    Réponses: 8
    Dernier message: 10/03/2005, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo