37

我正在创建一个控制台应用程序并使用一个switch语句来创建一个简单的菜单系统。用户输入采用单个字符的形式,在屏幕上显示为大写字母。但是,我确实希望程序同时接受小写和大写字符。

我知道switch语句用于与常量进行比较,但是是否可以执行以下操作?

switch(menuChoice) {
    case ('q' || 'Q'):
        //Some code
        break;
    case ('s' || 'S'):
        //More code
        break;
    default:
        break;
}

如果这不可能,是否有解决方法?我真的不想重复代码。

4

7 回答 7

63

这边走:

 switch(menuChoice) {
    case 'q':
    case 'Q':
        //Some code
        break;
    case 's':
    case 'S':
        //More code
        break;
    default:
 }

有关该主题的更多信息: http ://en.wikipedia.org/wiki/Switch_statement#C.2C_C.2B.2B.2C_Java.2C_PHP.2C_ActionScript.2C_JavaScript

于 2011-01-16T11:20:22.050 回答
26

普遍接受的语法是:

switch(menuChoice) {
    case 'q':
    case 'Q':
        //Some code
        break;
    case 's':
    case 'S':
        //More code
        break;
    default:
        break;
}

即:由于缺少 a break,程序执行级联到下一个块。这通常被称为“失败”。

也就是说,您当然可以通过 toupper/tolower 简单地在这种情况下规范化“menuChoice”变量的大小写。

于 2011-01-16T11:20:40.813 回答
4

'q' || 'Q'导致bool类型结果 ( true ) 提升为 switch 条件 ( char ) 中使用的整数类型 - 给出值 1。如果编译器允许在多个标签中使用相同的值 (1),则在执行switch语句期间menuChoice将进行比较在每种情况下为 1。如果menuChoice值为 1,则第一个 case 标签下的代码将被执行。

因此,此处建议的答案使用字符常量(类型为char)作为每个案例标签中的整数值。

于 2011-01-16T12:02:57.510 回答
3

只需使用tolower(),这是我的男人:

概要
#include ctype.h

   int toupper(int c);
   int tolower(int c);

描述 toupper() 将字母 c 转换为大写,如果可能的话。

   tolower() converts the letter c to lower case, if possible.

   If c is not an unsigned char value, or EOF, the behavior of these
   functions is undefined.

返回 值 返回值是转换后的字母的值,如果无法转换,则返回 c。

因此,在您的示例中,您可以switch()使用:

switch(tolower(menuChoice)) {
    case('q'):
        // ...
        break;
    case('s'):
        // ...
        break;
}

当然,您可以同时使用toupper()and tolower(),以及大写字母和非大写字母。

于 2011-01-16T11:24:51.937 回答
3

在输入 switch 语句之前,您可以(并且出于可重复性的原因,应该)在您的 var 上使用 tolower fnc。

于 2011-01-16T11:26:21.567 回答
2
switch (toupper(choice))
{
  case 'Q':...
}

...或更低。

于 2011-01-16T11:23:51.020 回答
2

如果你这样做

case('s' || 'S'):
    // some code
default:
    // some code

两者sS都将被忽略,并且在您输入这些字符时将运行默认代码。所以你可以决定使用

case 's':
case 'S':
    // some code

或者

switch(toupper(choice){
    case 'S':
        // some code.

toupper将需要您包括ctype.h.

于 2019-08-02T17:28:02.080 回答