我是C的新手,需要帮助。我的代码如下。
#include<stdio.h>
#include<conio.h>
void main()
{
int suite=2;
switch(suite)
{
case 1||2:
printf("hi");
case 3:
printf("byee");
default:
printf("hello");
}
printf("I thought somebody");
getche();
}
我在Turbo C工作,输出为helloI thought somebody
。没有错误消息。
请告诉我这是如何运作的。
答案 0 :(得分:13)
case 1||2:
成为true
。所以它变成case 1:
但传递的值是2.所以执行默认情况。之后你的printf("I thought somebody");
被执行了。
答案 1 :(得分:6)
这样做:
switch(suite){
case 1:/*fall through*/
case 2:
printf("Hi");
...
}
这将是一个更清洁的方式来做到这一点。表达式1||2
的计算结果为1
,因为suite
为2,它既不匹配1也不匹配3,并跳转到default
大小写。
答案 2 :(得分:2)
case 1||2:
结果
case 1:
因为1 || 2
求值为1
(并且记住; case
语句中只允许使用常量积分表达式,因此您无法在一个case
中检查多个值。
您想使用:
case 1:
// fallthrough
case 2:
答案 3 :(得分:0)
您switch
上的值2
,与default
语句中的switch
大小写匹配,因此打印“hello”然后最后一行打印“我认为有人”
答案 4 :(得分:-1)
case (1||2):
printf("hi");
只需放上括号即可看到魔法。
在你的代码中,程序只检查第一个值然后关闭。因为它之后没有找到2它会进入默认情况。
但是当你具体说明两个术语,即1和2在一起时,使用括号,它就像希望的那样运行。