C switch case 中的多个标签值

ash*_*ion 3 c switch-statement

以下是 Dennis M Ritchie 的书 ANSI C 的摘录:

每种情况都由一个或多个整数值常量或常量表达式标记。

我无法想出一个开关盒的例子,其中我们有一个带有多个标签的开关盒

任何说明上述属性的示例都会有所帮助。

pax*_*blo 5

这是我在检查选项的程序中找到的一个示例:

switch (optionChar) {
    case 'a': case 'A':
    case 'f': case 'F':
    case 'q': case 'Q':
    case 'z': case 'Z': optionsOk = TRUE;  break;
    default:            optionsOk = FALSE; break;
}
Run Code Online (Sandbox Code Playgroud)

这可能不是我编写代码(a)的方式,但它肯定是有效的。当使用 导致case代码比长组连词短且||需要基本相似操作的条件时,通常会使用它:

if (optionChar == 'a' || optionChar == 'A' || ...
Run Code Online (Sandbox Code Playgroud)

事实上,K&R 本身就有一个例子,就在你提到的引用之后。它位于计算不同字符类的代码中:

while ((c = getchar()) != EOF) {
    switch (c) {
    case '0': case '1': case '2': case '3': case '4':
    case '5': case '6': case '7': case '8': case '9':
        ndigit[c-'0']++;
        break;
    case ' ': case '\n': case '\t':
        nwhite++;
        break;
    default:
        nother++;
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

(a)我可能会做以下事情:

optionsOk = (strchr("aAfFqQzZX", optionChar) != NULL);
Run Code Online (Sandbox Code Playgroud)

  • @Mercer,我想是的,这毕竟是 K&R - 除了失败之外没有任何奇特的功能:-) (2认同)