在C中使用逻辑运算符切换案例

时间:2012-11-05 04:54:11

标签: c switch-statement or-operator

我是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。没有错误消息。

请告诉我这是如何运作的。

5 个答案:

答案 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在一起时,使用括号,它就像希望的那样运行。