Cast char to enum language C

Fermé
Morendo - 18 juin 2011 à 14:06
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 19 juin 2011 à 19:48
Bonjour,
Je cherche depuis un moment sur le net un moyen de caster une chaîne de caractères pour
attribuer une valeur à un enum
exemple :
#include <stdlib.h>
#include <stdio.h>

typedef enum infer {un=1,deux= 2,trois=3,quatre=4,cinq=5,six=6,sept=7,huit=8,neuf=9,dix=10} infervingt; 
...
int main(void)
{
     infervingt test="un";
     printf("%d",test);
     return EXIT_SUCCESS
}


J'ai vu qu'il existait une méthode utilisant map en C++ , néanmoins je voudrai réaliser ceci en C, y a t'il une méthode simple qui m'aurait échapper ?
Je vous remercie de vos réponses !!


A voir également:

1 réponse

Voila ce qui arrive quand on parle trop vite..

#include <stdio.h>
#include <string.h>

typedef enum {
    C_EURO,
    C_STERLING,
    C_DOLLARS
} currency_et;

currency_et GetEnumFromString ( const char *s ) {
    static struct {
        const char *s;
        currency_et e;
    } map[] = {
        { "C_EURO", C_EURO },
        { "C_STERLING", C_STERLING },
        { "C_DOLLARS", C_DOLLARS },
    };
    int i;
    for ( i = 0 ; i < sizeof(map)/sizeof(map[0]); i++ ) {
        if ( strcmp(s,map[i].s) == 0 ) {
            return map[i].e;
        }
    }
}

int main ( ) {
    currency_et var;
    var = GetEnumFromString( "C_STERLING" );
    printf( "Result=%d\n", (int)var );
    return 0;
}


http://cboard.cprogramming.com/c-programming/60392-i-fail-conve rt-char-*-enum.html

le code contient quelques erreur notamment dans currency_et GetEnumFromString
error : reach end of a non void function
en esperant que cela aidera certains
Bonne journée
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 18/06/2011 à 15:58
Bonjour,
Pour l'erreur, c'est parce que le return n'est pas appelé dans tous les cas dans la fonction GetEnumFromString.
0
Oui pour ma version j'ai ajouté un return EXIT_FAILURE;
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
18 juin 2011 à 17:34
eu hce serait plutot EXIT_SUCCESS non ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 18/06/2011 à 17:52
@Pacorabanix,
Non, je ne pense pas. Si sa fonction sort de la boucle for sans avoir fait de return, c'est que la conversion n'a pas eu lieu. Enfin, de ce que je comprends.

@Morendo,
C'est pas terrible de mettre EXIT_FAILURE. Le mieux serait de mettre return -1;. Cela te permettrait de tester la valeur de retour et qu'elle soit différente des autres en cas d'erreur.
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
19 juin 2011 à 19:48
@fidddy, ah oui, ai mal compris le commentaire
0