首页 > 解决方案 > 检查字符是否在 C 的枚举中

问题描述

假设我需要从键盘读取一个字符,然后在当前菜单部分检查该字符是否有效(具有某些功能)。因此,如果我在 firstMenu 中,搜索 firstMenuKeys 项,如果找到该字符,则调用某个函数,否则抛出该字符。也许 Enum 不适合这个目的。

enum firstMenuKeys {

    UP = 72, 
    DOWN = 80,
    LEFT = 75, 
    RIGHT = 77,
    ENTER = 101,
    
};

enum secondMenuKeys {

    UP = 72, 
    DOWN = 80,
    ENTER = 101,
    
};




int main() {


    char c;
    c = getch();

    
    //check whether c is in firstMenuKeys


}

标签: cenumscharacter

解决方案


Anenum本身不太适合根据一组有效值检查一个值 - C 没有指定一个操作来迭代枚举值。一种常见的方法是使用X 宏来创建枚举和相应的检查函数。使用 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;
    }
}

推荐阅读