检查字符是否在C中的枚举中

检查字符是否在C中的枚举中,c,enums,character,C,Enums,Character,比如说,我需要从键盘上读取一个字符,然后在当前菜单部分中检查这个字符是否有效(有一些功能)。 所以,如果我在firstMenu中,搜索firstMenuKeys项,然后如果找到字符,调用一些函数,否则抛出这个字符。 可能Enum不适合此用途 enum firstMenuKeys{ 上升=72, 向下=80, 左=75, 右=77, 输入=101, }; enum secondMenuKeys{ 上升=72, 向下=80, 输入=101, }; int main(){ 字符c; c=getch()

比如说,我需要从键盘上读取一个字符,然后在当前菜单部分中检查这个字符是否有效(有一些功能)。 所以,如果我在firstMenu中,搜索firstMenuKeys项,然后如果找到字符,调用一些函数,否则抛出这个字符。 可能Enum不适合此用途

enum firstMenuKeys{
上升=72,
向下=80,
左=75,
右=77,
输入=101,
};
enum secondMenuKeys{
上升=72,
向下=80,
输入=101,
};
int main(){
字符c;
c=getch();
//检查c是否在firstMenuKeys中
}

一个
枚举
本身并不适合根据一组有效值检查一个值-C没有指定一个操作来迭代枚举值。一种常见的方法是使用创建枚举和相应的检查函数。使用X宏可以定义一次列表值,然后在多个上下文中使用

#define FIRST_MENU_KEYS \
    X(UP, 72) \ 
    X(DOWN, 80) \
    X(LEFT, 75) \ 
    X(RIGHT, 77) \
    X(ENTER, 101)

#define X(a, b) a = b,
enum firstMenuKeys {
    FIRST_MENU_KEYS
};

#define X(a, b) case a:
int isFirstMenuKey(char input)
{
    switch (input) {
        FIRST_MENU_KEYS
            return 1;
        default:
            return 0;
    }
}

enum
不直接相关。您可能需要一个包含有效值的数组(可能来自
enum
),并且需要搜索该数组。或者,您可以使用带有
枚举
名称的
开关
作为大小写标签,并使用
默认
大小写来捕获无效的大小写。请注意,在C中,枚举常量必须在作用域中是不同的-请参阅C11。您的C代码无法编译。您可能希望创建一个键名枚举,以及数组
firstMenuKeys
secondMenuKeys
。枚举本质上是一个符号定义的集合,没有枚举或检查成员资格的机制。由于这些似乎都是字符值,一种方法是将它们存储在字符串
const char firstKeys[]=“HPKMe”中然后检查strchr(firstKeys,c)
是否匹配。