【问题标题】:Reading and converting an enum type in C在 C 中读取和转换枚举类型
【发布时间】: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 语句吗?

或者,我需要做一个乏味的 switchcase 块?

基本上,对于我的数据的第一行,我想要n=2l=p

对于第二行,我想要n=2l=p

...

...

对于第 30 行,我想要 n=5l=d

【问题讨论】:

  • 我不记得有任何方法可以将字符串或字符转换为与 C 中的枚举类型等效的东西。枚举用于使开发人员的生活更轻松,例如在使用可枚举集时。如果您想从用户或某个文件中获取输入,我相信您必须创建一个对应表才能做到这一点,并且它们匹配
  • Get enum value by name的可能重复
  • 啊哈!所以你必须制作地图

标签: c types enums


【解决方案1】:
char *table = "spdfghiklmnoqrtuvwxyz";
char *p = strchr(table, c)
if(p!=NULL)
    l= p-table;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2010-10-11
    相关资源
    最近更新 更多