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 :

tester si une valeur appartient à un type enumeratif ?


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 104
    Points : 62
    Points
    62
    Par défaut tester si une valeur appartient à un type enumeratif ?
    bonjour tous le monde
    est ce qu'il est possible de tester si une valeur appartient à un type enumeratif ?

  2. #2
    Membre averti Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Points : 417
    Points
    417
    Par défaut
    personnellement je connais la fonction isnan (is not a numbre) :
    http://www.linux-france.org/article/man-fr/man3/isnan-3.html

    Je sais pas si ca t'aide mais bon !

  3. #3
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 104
    Points : 62
    Points
    62
    Par défaut
    merci,mais je veux dire par type numerique par exemple ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    enum typ
    {
    lundi,mardi,mercredi
    };

  4. #4
    Membre averti Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Points : 417
    Points
    417
    Par défaut
    C'est donc pas un type numerique mais ENUMERE
    Donc dans ce cas la je ne peux t'aider desole

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Généralement on ne peut pas le faire. Cependant ce qu'on peut faire est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    enum Foo
    {
      min,
      a,b,c,d,e,f,g,
      max;
    };
    bool isfoo(Foo foo)
    {
      return min<foo && foo<max;
    }
    Mais cela ne marche seulement si to ne donne pas de valeurs numérique toi-même au valeurs énumérées.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 10
    Points
    10

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Là je ne vois pas vraiment ce que tu veux dire... Dans le lien que tu a posté tu ne montre pas vraiment comment on peut dire si une valeur appartient à un type énuméré ou non. Bon on peut bien sûr toujours la comparée à chaque valeurs du type mais je suis qu'ici une solution un peu plus flexible est demandée.

  8. #8
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Cela n'a pas de sens.
    Avec
    toto est dans l'énuméré et tata n'y est pas.
    Tout cela est résolu à la compilation.

    Il faudrait que tu sois plus explicite par rapport ton problème exact.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 104
    Points : 62
    Points
    62
    Par défaut
    bonjour,j'ai plusieurs valeurs dans la type enumeratif et donc je ne veux pas tester si une valeur appartient pour tous les valeurs
    est ce qu'il y aune methode plus simple?

  10. #10
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut
    Salut,

    je pense que il ou elle veut savoir si par exemple "tata" fait parti de l'énumération :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // dans ce cas non
    enum { toto, titi };
     
    // dans ce cas oui
    enum { toto, titi, tata };
    Son problème me fait penser aux tables de hashage qui assignent à une clé une valeur (cf. les map).

    Mais ça n'a rien a voir avec les enum.

    A+.

    Flo.

  11. #11
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    ce post part dans tous les sens... explique plus clairement ton problème, avec du code, si possible.

  12. #12
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 104
    Points : 62
    Points
    62
    Par défaut
    autrement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::binary_search(v.begin(),v.end(),x);
    verifie que x appartient au vecteur v
    au lieu du vecteur v j'ai

    enum typ
    {
    a,b,c,d
    };
    et je veux tester que x appartient à typ

  13. #13
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    tu as donc une valeur numérique et tu veux savoir si cette valeur est une des valeur défini dans ton enum sans utiliser les identifiants de l'enumérateur ?

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    enum UnEnum { a, b, c, d };
    int test = 4;
    comment faire pour savoir si "test" est défini dans l'enum ?

    eh bien, à moins d'utiliser les Min/Max comme l'a montré ben04, je ne vois pas... de toute façon, ce n'est pas très propre : ce ne sont pas les mêmes types.

  14. #14
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Juste pour le fun, et pour les fans du préprocesseur :

    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
    #define ENUM_BODY(name, value) \
        name = value,
     
    #define ENUM_CASE(name, value) \
        case name : return true;
     
    #define DEFINE_ENUM(name, values) \
        enum name { \
            values(ENUM_BODY) \
        }; \
        inline bool value_in_##name(int x) \
        { \
            switch (x) { \
                values(ENUM_CASE) \
                default : return false; \
            } \
        }
    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
    #define VALUES(_) \
        _(a, 1) \
        _(b, 3) \
        _(c, 5) \
        _(d, 24)
     
    DEFINE_ENUM(MyEnum, VALUES)
     
    int main()
    {
        cout << "1 : " << boolalpha << value_in_MyEnum(1) << endl;
        cout << "2 : " << boolalpha << value_in_MyEnum(2) << endl;
        cout << "5 : " << boolalpha << value_in_MyEnum(5) << endl;
     
        return 0;
    }

  15. #15
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut
    C'est quoi "boolalpha" ?

    Flo.

  16. #16
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par Flo.
    C'est quoi "boolalpha" ?

    Flo.
    C'est pour afficher "true" ou "false" au lieu de "1" ou "0".
    ...chose que tu aurais pu trouver simplement en essayant, ou avec Google .

  17. #17
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 104
    Points : 62
    Points
    62
    Par défaut
    merci mais quand j'ai compile il me fait sortir des erreurs
    je ne sais pas trop sur le preprocesseur

  18. #18
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il y avait un "\" de trop dans mon code. A part ça, ce serait mieux si tu nous donnait ces erreurs, on ne peut pas les deviner.

    J'ai donné ce code pour le fun, personnellement je ne sais pas si j'utiliserais ce genre de mécanisme. Enfin à toi de voir.

  19. #19
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 104
    Points : 62
    Points
    62
    Par défaut
    voici les erreurs
    main2.cpp
    main2.cpp(11) : error C2501: 'name' : missing storage-class or type specifiers
    main2.cpp(11) : error C2065: 'value' : undeclared identifier
    main2.cpp(14) : error C2059: syntax error : 'case'
    main2.cpp(14) : error C2059: syntax error : 'return'
    main2.cpp(17) : error C2017: illegal escape sequence
    main2.cpp(18) : error C2143: syntax error : missing '}' before '('
    main2.cpp(18) : fatal error C1903: unable to recover from previous error(s); stopping compilation



    ---------------------- Done ----------------------

    Build: 0 succeeded, 1 failed, 0 skipped

    vous avez dit
    Il y avait un "\" de trop dans mon code. A part ça, ce serait mieux si tu nous donnait ces erreurs, on ne peut pas les deviner
    lequelle ?

  20. #20
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    J'ai corrigé le code dans mon post précédent.

    Tes erreurs semblent venir de plus haut, tu es sûr d'avoir bien repris le code ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/06/2010, 18h46
  2. Comment tester si une valeur de type entier est nulle ?
    Par kikidrome dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 08/07/2009, 00h53
  3. comment tester si une variable est de type indifined
    Par amelhog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/08/2005, 09h32
  4. Tester qu'une valeur existe dans une "liste"
    Par Oluha dans le forum Langage
    Réponses: 12
    Dernier message: 04/08/2005, 23h01
  5. Affecter une valeur à un input type text
    Par mr.t dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/06/2005, 15h18

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