怀疑在C中使用switch语句
我有一个疑问:为什么我在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"); } }
好,
i == 3将打印message3和message2
i == 4将打印message4 abd message2
i的每个其他值都将打印message2
使用break
来终止匹配的处理。
@Shubham。 如果我重复你已经知道的事,请原谅我。 在某些方面,我正在扩展@Henk已经指出的内容。
在switch
语句中, case
和default
标签的作用仅用于确定执行应该从哪里开始。 确定第一个标签后,其余标签没有任何意义。 执行是“落伍”。 因此,我们必须使用break
来停止和退出switch
。
在你的代码中,如果i == 3
那么case 3
是第一行执行。 然后执行case 3
, default
和case 2
,然后执行break
。
如果i
是3
以外的任何值,则执行default
,然后执行case 2
,然后退出switch
。 由于default
位置,我认为不会执行case 1
。
在案例3和default
情况下,您没有break
。
case 3
之后没有break
。 因此, switch
也会通过并执行default
语句。
default
情况的顺序不确定何时执行该情况。 当switch变量与case表达式中的任何值都不匹配时,将执行default
情况。
对于上面的代码值
- 当执行
case 1
的代码时,1
将打印“消息1” - 当执行
case 2
的代码时,图2
将打印“消息2” - 当执行
case 3
之后的代码时,3
将打印“消息3message2”,并且default
case 2
为“default
并且通过case 2
- 当执行
default
的代码并通过case 2
时,4
将打印“message 4message2” - 执行
default
情况时,任何其他值都将打印“消息2”,并通过case 2
我有时会使用默认开关编码我的开关
switch (ch) { default: break; /* do nothing */ case '.': ch = ','; break; /* swap commas */ case ',': ch = '.'; break; /* and periods */ }