Cast char to enum language C

Morendo -  
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. Morendo
     
    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
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Bonjour,
      Pour l'erreur, c'est parce que le return n'est pas appelé dans tous les cas dans la fonction GetEnumFromString.
      0
    2. Morendo
       
      Oui pour ma version j'ai ajouté un return EXIT_FAILURE;
      0
    3. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      eu hce serait plutot EXIT_SUCCESS non ?
      0
    4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      @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
    5. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      @fidddy, ah oui, ai mal compris le commentaire
      0