我正在创建一个控制台应用并使用switch
语句创建一个简单的菜单系统。用户输入采用单个字符的形式,在屏幕上显示为大写字母。但是,我确实希望程序接受小写和大写字符。
我知道switch
语句用于比较常量,但是可以执行以下操作吗?
switch(menuChoice) {
case ('q' || 'Q'):
//Some code
break;
case ('s' || 'S'):
//More code
break;
default:
break;
}
如果无法做到这一点,是否有解决方法?我真的不想重复代码。
答案 0 :(得分:44)
这样:
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
答案 1 :(得分:19)
普遍接受的语法是:
switch(menuChoice) {
case 'q':
case 'Q':
//Some code
break;
case 's':
case 'S':
//More code
break;
default:
break;
}
:由于缺少break
,程序执行会进入下一个程序段。这通常被称为“堕落”。
那就是说,你当然可以通过toupper / tolower简化这个'menuChoice'变量的情况。
答案 2 :(得分:3)
只需使用tolower()
,这是我的男人:
<强>概要强>
#include ctype.hint 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()
,包括大写字母和非大写字母。
答案 3 :(得分:3)
在进入switch语句之前,你可以(并且出于可更新性的原因)在var上使用tolower fnc。
答案 4 :(得分:3)
'q' || 'Q'
会导致 bool 类型结果( true ),该结果会提升为切换条件中使用的整数类型( char ) - 给出值1.如果编译器允许在多个标签中使用相同的值(1),则在执行开关时,语句menuChoice
将在每种情况下与值1进行比较。如果menuChoice
的值为1,则第一个案例标签下的代码将被执行。
因此,建议的答案在每个案例标签中使用字符常量(类型为 char )作为整数值。
答案 5 :(得分:2)
switch (toupper(choice))
{
case 'Q':...
}
...或tolower。
答案 6 :(得分:0)
如果您这样做
case('s' || 'S'):
// some code
default:
// some code
s
和S
都将被忽略,并且只要您输入这些字符,就会运行默认代码。因此,您可以决定使用
case 's':
case 'S':
// some code
或
switch(toupper(choice){
case 'S':
// some code.
toupper
将需要您包含ctype.h
。