and*_*nho 0 c switch-statement
我目前正在学习C编程的基础知识,并且即将尝试使用switch语句.我的问题是:
switch (answer)
{
case ('Y' || 'y') :
printf("\nYay! Me too. ");
break;
case ('N' || 'n') :
printf("\nBoo! :(");
break;
default:
printf("\nInput error!");
break;
}
Run Code Online (Sandbox Code Playgroud)
为什么我不能写一个|| 在我的不同情况下?
switch case不支持逻辑操作.在您的情况下,解决方案很简单:
switch (answer)
{
case 'Y':
case 'y':
printf("\nYay! Me too. ");
break;
case 'N':
case 'n':
printf("\nBoo! :(");
break;
default:
printf("\nInput error!");
break;
}
Run Code Online (Sandbox Code Playgroud)
首先,将requires thecase`表达式切换为常量,因此不允许表达式.
但即使表达式被允许(因为它在其他语言中复制了大部分C的语法,如PHP和Javascript),它也不会做你想要的.该声明
case <value>:
Run Code Online (Sandbox Code Playgroud)
类似于:
if (answer == (<value>))
Run Code Online (Sandbox Code Playgroud)
所以,如果你写:
case ('N' || 'n'):
Run Code Online (Sandbox Code Playgroud)
就像是:
if (answer == ('N' || 'n'))
Run Code Online (Sandbox Code Playgroud)
表达式'N' || 'n'被计算为布尔值,返回1.所以它相当于:
case (1):
Run Code Online (Sandbox Code Playgroud)
这显然不是你想要的.
你可以使用
switch (tolower(answer)):
Run Code Online (Sandbox Code Playgroud)
然后你只需要与小写字母进行比较,或者你可以使用多个case语句的连贯行为:
case 'N':
case 'n':
Run Code Online (Sandbox Code Playgroud)