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