【发布时间】:2014-05-10 05:31:13
【问题描述】:
我定义了以下数据类型:
typedef enum
{
s=0,
p=1,
d=2,
f=3,
g=4,
h=5,
i=6,
k=7,
l=8,
m=9,
n=10,
o=11,
q=12,
r=13,
t=14,
u=15,
v=16,
w=17,
x=18,
y=19,
z=20
} aqn; /* azimuthal quantum number */
我已经声明了这些变量:
aqn l;
int n;
char c;
我在一个文件中有以下数据:
2p ²P° 2.5 2201.333333
2p ²D 4.5 232287.200000
2p ²S 0.5 298282.000000
2p ²P° 2.5 524778.000000
3s ²S 0.5 1210690.000000
3d ²D 4.5 1335962.000000
3s ²P° 2.5 1382990.000000
3p ²D 4.5 1441942.000000
3p ²S 0.5 1460910.000000
3s ²P° 2.5 1486970.000000
3d ²F° 6.5 1506161.428571
3d ²P° 2.5 1513486.666667
3p ²D 2.5 1548850.000000
3p ²S 0.5 1556590.000000
3d ²F° 6.5 1597480.000000
3d ²P° 2.5 1610670.000000
3s ²D 4.5 1638790.000000
4s ²S 0.5 1647880.000000
3p ²F° 6.5 1690802.857143
4d ²D 4.5 1693830.000000
3d ²D 2.5 1703280.000000
3d ²D 2.5 1733900.000000
4p ²D 4.5 1824376.000000
4d ²F° 6.5 1847218.571429
5d ²D 4.5 1858380.000000
6d ²D 4.5 1946060.000000
4d ²F° 6.5 1964300.000000
5d ²F° 6.5 2006054.285714
6d ²F° 3.5 2092940.000000
5d ²F° 6.5 2130100.000000
数据被读取和解析。每行的第一项存储在名为config 的变量中,其类型为char *。
我需要将数字放入变量n,我声明为int,将字母字符放入变量l,我声明为enum类型。
我使用以下获取n:
sscanf(config,"%d%c",&n,&c);
现在,c 的类型为 char。有没有一种快速简便的方法可以将它放入我的枚举aqn 变量l?
或者,有没有一种快速简便的方法来读取config 字符串并将值直接分配给我的变量l?
可以使用一些预处理器#define 语句吗?
或者,我需要做一个乏味的 switch 和 case 块?
基本上,对于我的数据的第一行,我想要n=2 和l=p。
对于第二行,我想要n=2 和l=p。
...
...
对于第 30 行,我想要 n=5 和 l=d。
【问题讨论】:
-
我不记得有任何方法可以将字符串或字符转换为与 C 中的枚举类型等效的东西。枚举用于使开发人员的生活更轻松,例如在使用可枚举集时。如果您想从用户或某个文件中获取输入,我相信您必须创建一个对应表才能做到这一点,并且它们匹配
-
啊哈!所以你必须制作地图