2014-12-03 80 views

回答

2

如果enum没有明确指定号码,你可以投ienum keys_t获得的值:

enum keys_t ithValue = (enum keys_t)i; 

一般,不过,有一个当你将他们获得i个值不支持明确:你需要建立一个数组:

enum keys_t {P=2, Pv=3, Pr=5, Pd=7, U=11, I=13, S=17, proc=19, R=23, H=29, A=31, sqrt=37, plus=41, minus=43, mult=47, equal=53, none=0, error=59}; 
enum keys_t keyT_vals[] = {P, Pv, Pd, U, ...}; // ...and so on 
... 
enum keys_t ithValue = keyT_vals[i]; 

如果你想获得的第i个枚举值的名称,你需要创建一个字符串数组,并mainta在它与枚举分开。您可以使用该 “stringize” 宏:

#define STR(x) #x 

enum keys_t {P, one, error, ...}; 
char *keys_t_names[] = {STR(P), STR(one), STR(error), ...}; 
... 
char *ithName = keys_t_names[i]; 

Demo.

+0

你肯定第一的方法呢?这个快速的例子似乎不起作用:'enum keys_t = {P,one,error}; enum keys_t ithValue =(enum keys_t)1; (“值为%s \ n”,ith值); return 0;' – 2014-12-03 15:00:17

+1

@Noran C'enum'是一个整数类型,你不能像字符串打印或获取它的名字。实际上,编译器完成时,所有的枚举名称都消失了。该技巧适用于数值,但([demo](http://ideone.com/5UoNzq))。 – dasblinkenlight 2014-12-03 15:05:35

+0

非常感谢!做得好! – 2014-12-03 15:12:13