Cast char to enum language C
Morendo
-
Pacorabanix Messages postés 4122 Date d'inscription Statut Membre Dernière intervention -
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 :
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 !!
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
-
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-
-
-
-
@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. -
-