Cast char to enum language C

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 !!

1 réponse

  • Votes
  • Date
  • Date décroissante
  1. 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
    1. Contributeur
      Bonjour,
      Pour l'erreur, c'est parce que le return n'est pas appelé dans tous les cas dans la fonction GetEnumFromString.
    2. Oui pour ma version j'ai ajouté un return EXIT_FAILURE;
    3. eu hce serait plutot EXIT_SUCCESS non ?
    4. Contributeur
      @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.
    5. @fidddy, ah oui, ai mal compris le commentaire