Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中使用switch语句的疑问_C_Switch Statement - Fatal编程技术网

在C语言中使用switch语句的疑问

在C语言中使用switch语句的疑问,c,switch-statement,C,Switch Statement,我有一个疑问:为什么我在I=3和I=7时得到输出 main() { int i; scanf("%d",&i); switch(i) { case 3: printf("message3"); default: if(i==4) printf("message4"); case 2:printf("message2"); break;

我有一个疑问:为什么我在
I=3
I=7
时得到输出

main()
{
  int i;
  scanf("%d",&i);
  switch(i)
  {
        case 3: printf("message3");
        default:
               if(i==4)
               printf("message4");
        case 2:printf("message2");
               break;
        case 1:printf("Message1");
  }
}

案例3之后没有
中断
默认
,案例3之后没有
中断
默认
案例3之后没有
中断
。因此,
开关
也会失效并执行
默认
语句。

案例3
之后,没有
中断
。因此,
switch
也会失败并执行
default
语句。

很好

i==3将打印消息3和消息2
i==4将打印消息4和消息2
每隔一个值i将打印message2

使用
break
终止匹配处理

i==3将打印消息3和消息2
i==4将打印消息4和消息2
每隔一个值i将打印message2


使用
break
终止匹配处理

舒巴姆。如果我重复你已经知道的,请原谅我。在某些方面,我正在扩展@Henk已经指出的内容

switch
语句中,
case
default
标签的作用仅用于确定执行应从何处开始。一旦确定了第一个标签,其余标签就没有意义了。执行是“失败的”。因此,我们必须使用
break
停止并退出
开关

在您的代码中,如果
i==3
,则
case 3
是执行的第一行。然后执行
case 3
default
case 2
,然后执行
break


如果
i
3
以外的任何值,则执行
默认值
,然后执行
案例2
,然后退出
开关
。我认为由于
default

@Shubham的位置,人们永远无法执行
案例1
。如果我重复你已经知道的,请原谅我。在某些方面,我正在扩展@Henk已经指出的内容

switch
语句中,
case
default
标签的作用仅用于确定执行应从何处开始。一旦确定了第一个标签,其余标签就没有意义了。执行是“失败的”。因此,我们必须使用
break
停止并退出
开关

在您的代码中,如果
i==3
,则
case 3
是执行的第一行。然后执行
case 3
default
case 2
,然后执行
break


如果
i
3
以外的任何值,则执行
默认值
,然后执行
案例2
,然后退出
开关
。我认为,由于
default
的位置,
default
案例的顺序并不决定该案例何时执行,因此人们永远无法执行
案例1
。当开关变量与case表达式中的任何值不匹配时,将执行
默认值
case

对于值大于的代码

  • 1
    在执行案例1之后的代码时,将打印“消息1”
  • 2
    在执行案例2之后的代码时,将打印“消息2”
  • 3
    在执行
    案例3
    故障排除
    默认
    故障排除
    案例2
    后的代码时,将打印“消息3消息2”
  • 4
    在执行
    默认值
    故障排除后的代码时,将打印“message 4message2”至
    案例2
  • 当执行
    默认
    案例和故障排除
    案例2

有时我会先用默认值对开关进行编码

switch (ch) {
  default: break; /* do nothing */
  case '.': ch = ','; break; /* swap commas */
  case ',': ch = '.'; break; /* and periods */
}

默认
案例的顺序不确定该案例何时执行。当开关变量与case表达式中的任何值不匹配时,将执行
默认值
case

对于值大于的代码

  • 1
    在执行案例1之后的代码时,将打印“消息1”
  • 2
    在执行案例2之后的代码时,将打印“消息2”
  • 3
    在执行
    案例3
    故障排除
    默认
    故障排除
    案例2
    后的代码时,将打印“消息3消息2”
  • 4
    在执行
    默认值
    故障排除后的代码时,将打印“message 4message2”至
    案例2
  • 当执行
    默认
    案例和故障排除
    案例2

有时我会先用默认值对开关进行编码

switch (ch) {
  default: break; /* do nothing */
  case '.': ch = ','; break; /* swap commas */
  case ',': ch = '.'; break; /* and periods */
}

删除
C++
标记并放置
C
标记。我认为程序粘贴不正确。在
案例1:
之后的switch语句中粘贴了相同的程序两次,我相信。如果我在其中所做的修改不正确,请发表您的评论。删除
C++
标记,然后放置
C
标记。我认为程序粘贴不正确。在
案例1:
之后的switch语句中粘贴了相同的程序两次,我相信。如果我对它所做的修改不正确,请发表您的评论。