6

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

请让我知道这是如何工作的。

4

6 回答 6

15
case 1||2:

变成true. 所以它变成case 1:但传递的值是2。所以默认情况下执行。在那之后你printf("I thought somebody");被处决了。

于 2012-11-05T04:59:58.567 回答
8

做这个:

switch(suite){
  case 1:/*fall through*/
  case 2: 
    printf("Hi");
...
}

这将是一种更清洁的方法。表达式的1||2计算结果为1,因为suite是 2,它既不匹配 1 也不匹配 3,并跳转到defaultcase。

于 2012-11-05T04:57:24.570 回答
3
case 1||2:

结果是

case 1:

因为1 || 2计算结果为1(并记住;case语句中只允许使用常量整数表达式,因此您不能在一个中检查多个值case)。

你想使用:

case 1:
  // fallthrough
case 2:
于 2012-11-05T05:02:55.397 回答
0

You switchon value 2,它与语句中default的大小写匹配switch,因此它打印“hello”,然后最后一行打印“I think someone”。

于 2012-11-05T05:01:18.757 回答
0

请记住,C 中的 switch 语句会将您的输入参数与指定的每个 case 进行比较,并从该 case 输入 switch。然后它会继续运行,直到遇到一个不包含在您的代码片段中的 break 语句。我有一种感觉,使用下面的代码和输入 2,您希望看到像“hiI think someone”这样的输出:

 switch(suite)
 {           
  case 1||2:
  printf("hi");

  case 3:
  printf("byee");

  default:
  printf("hello");
 }

把逻辑运算符问题放在一边(上面有很多很好的答案),即使这段代码在 case 1||2 处输入了开关,你的输出也会是“hibyeehelloI think someone”。要修复,只需在您希望代码执行某些操作的每个案例的末尾添加一个中断:

 switch(suite)
 {           
  case 1:
  //fallthrough
  case 2:
  printf("hi");
  break;

  case 3:
  printf("byee");
  break;

  default:
  printf("hello");
  break;
 }
于 2021-10-08T21:52:35.153 回答
-1
case (1||2):
  printf("hi");

只需放括号,看看魔术。

在您的代码中,程序只检查第一个值并关闭。因为,它没有找到 2 之后它进入默认情况。

但是,当您使用括号指定两个术语(即 1 和 2)在一起时,它会按需要运行。

于 2016-09-20T21:20:51.013 回答