c - 检查字符是否在 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
}
解决方案
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;
}
}
推荐阅读
- python - 已解决:Discord.py 的“on_message”在我实施“schedule”后无法工作
- javascript - 用JS改变高度onclick并恢复正常
- python-3.x - 谷歌云函数 (python) 未部署 - 加载用户代码时函数失败
- single-sign-on - 在另一个 Keycloak 中使用一个 Keycloak 作为 IDP,而无需访问登录页面
- plugins - 集成棋牌软件
- node.js - Nodemailer 无法从 Docker 容器内发送电子邮件
- java - 如何从地图列表中获取累计金额
- azure-functions - 将 Azure 函数转换为无服务器函数
- javascript - 滚动动画持续时间 - javascript
- entity-framework - 在实体框架核心中包含缺失的月份和数据