怀疑在C中使用switch语句

时间:2011-03-15 17:31:08

标签: 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;
        case 1:printf("Message1");
  }
}

5 个答案:

答案 0 :(得分:2)

好吧,

i == 3将打印message3和message2
 i == 4将打印message4 abd message2
 i的每个其他值都将打印message2

使用break终止匹配处理。

答案 1 :(得分:2)

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

switch语句中,casedefault标签的作用仅用于确定执行应从何处开始。确定第一个标签后,其余标签没有任何意义。执行是“落伍”。因此,我们必须使用break来停止并退出switch

在您的代码中,如果i == 3case 3是第一行执行。然后执行case 3defaultcase 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 */
}