关于C中的开关盒,为什么不打印?

时间:2012-12-28 15:15:51

标签: c switch-statement

  

可能重复:
  Code before the first ‘case’ in a switch-statement

我在C中有以下一组代码:

void isFindValue(int value1, int value2)
{
    switch (value1)
    {
    case 1:
      printf("value1 is found!\n");
      break;

    case 2:
      printf("value1 is found!\n");
      break;

    case 3:
      switch(value2)
      {
    printf("aaaaaaaaaaaaa\n");
     case 6:
         printf("bbbbbbbbbbbb\n");
         printf("value2 is found!\n");
         break;
      }
     default:
     break;    
}

如果我按照isFindValue(3,6)调用函数; bbbbbbbbbbbb的printf显示,但aaaaaaaaaaaaa没有,为什么会这样?我们不应该在案件之前做点什么吗?

5 个答案:

答案 0 :(得分:6)

因为switch ()使用标签。它跳转到满足条件的标签。所以到达时

switch(value2) {
    printf("aaaaaaaaaaaaa\n");
    case 6:

控制流会立即跳转到标签case 6:,以便跳过printf()的号码。

解决方案是将其正确放置在内部开关之外:

case 3:
    printf("aaaaa\n");
    switch (value2) {

答案 1 :(得分:0)

“aaaaaaaaaaaaa”没有显示,因为它被错放了(它没有包含在标签中,因此无法访问)。您需要在第二个switch语句之前将其移动到:

case 3:
    printf("aaaaaaaaaaaaa\n");
    switch(value2)
    {
        // body
    }

答案 2 :(得分:0)

语句中对printf函数的调用:

printf("aaaaaaaaaaaaa\n");
无法访问

,因为它位于第二个case的第一个switch语句之前。

请参阅Code before the first 'case' in a switch-statement

答案 3 :(得分:0)

“aaaaaaaaaaaaa \ n”未在任何case内打印。您的代码结构不正确。

尝试将语句移出switch块,如下所示:

printf("aaaaaaaaaaaaa\n");
switch(value2)
{
    case 6:
        printf("bbbbbbbbbbbb\n");
        printf("value2 is found!\n");
        break;
}
break;

答案 4 :(得分:0)

切换始终查找case,这就是跳过aaaaaaaaaaaa的原因。它将执行相关case块的声明。