使用 or 的 switch 语句

Posted

技术标签:

【中文标题】使用 or 的 switch 语句【英文标题】:Switch statement using or 【发布时间】:2011-06-09 22:50:36 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

这样:

 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

【讨论】:

【参考方案2】:

普遍接受的语法是:

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

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

也就是说,您当然可以通过 toupper/tolower 简单地将本实例中的“menuChoice”变量的大小写标准化。

【讨论】:

我认为这应该是最好的答案,而不是上面的答案 - 它不仅回答了如何解决它,而且还告诉你为什么在你必须去一个可能存在或可能不存在的链接之前。 【参考方案3】:

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

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

【讨论】:

【参考方案4】:

只需使用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()tolower(),包括大写和非大写字母。

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:
switch (toupper(choice))

  case 'Q':...

...或更低。

【讨论】:

根据 B.S. 的说法,您应该(出于便携性原因)使用 tolower【参考方案7】:

如果你这样做了

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

【讨论】:

以上是关于使用 or 的 switch 语句的主要内容,如果未能解决你的问题,请参考以下文章

Java Switch 语句 - “或”/“和”可能吗?

两个if语句可以平行使用吗

switch语句里不需要必须有break吗

switch语句 switch语句的相关知识

Java中为啥我写switch语句,在case后加break就错误,不加就正确,很困惑,

switch语句的例子都有哪些?