【发布时间】:2021-01-22 00:11:51
【问题描述】:
假设我需要从键盘读取一个字符,然后在当前菜单部分检查该字符是否有效(具有某些功能)。 因此,如果我在 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
}
【问题讨论】:
-
enum不直接相关。您可能需要一个包含有效值的数组(可能来自enum)并且您需要搜索该数组。或者,您可以使用switch和enum名称作为案例标签,并使用default案例来捕获无效的案例。 -
请注意,在 C 中,枚举常量在范围内必须是不同的——请参阅 C11 §6.7.2.2 Enumeration specifiers §3 and footnote 127。您的 C 代码无法编译。您可能想要创建键名的枚举,以及数组
firstMenuKeys和secondMenuKeys。 -
枚举本质上是符号定义的集合,没有枚举或检查成员资格的机制。由于这些似乎都是字符值,因此一种方法是将它们存储在字符串
const char firstKeys[] = "HPKMe";中,然后检查strchr(firstKeys, c)是否匹配。