Possible Duplicate:
Easy way to use variables of enum types as string in C?
Is there any elegant way to convert a user input string to an ENUM value is straight C, besides the manual way.
A simplified example of calling a function that takes an ENUM as an argument:
enum = {MONDAY,TUESDAY,WEDNESDAY};
...
//Get user to enter a day of the week from command line
...
//Set the work day according to user input
if (strcmp(user_input,"MONDAY")==0){
SET_WORK_DAY(MONDAY);
} else if (strcmp(user_input,"TUESDAY")==0){
SET_WORK_DAY(TUESDAY);
}
...
Thanks
$ cat wd.c
#include <stdio.h>
#define mklist(f) \
f(MONDAY) f(TUESDAY) f(WEDNESDAY)
#define f_enum(x) x,
#define f_arr(x) {x, #x},
enum weekdays { mklist(f_enum) WD_NUM };
struct { enum weekdays wd; char * str; } wdarr[] = { mklist(f_arr) };
int main(int argc, char* argv[]) {
int i;
for (i=0; i < sizeof(wdarr)/sizeof(wdarr[0]); i++) {
if (strcmp(argv[1], wdarr[i].str) == 0) {
printf("%d %s\n", wdarr[i].wd, wdarr[i].str);
return 0;
}
}
printf("not found\n");
return 1;
}
$ make wd
cc wd.c -o wd
$ ./wd MONDAY
0 MONDAY
$ ./wd TUESDAY
1 TUESDAY
$ ./wd FOODAY
not found
is my favorite way to do such things. This ensures that no consistency errors can occur between the enum
and the mapping array.
No, there is no other way; because an enum
is, inside the machine, just some number. You could use some preprocessor tricks. See this question.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With