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

1 c switch-statement

可能重复:
switch语句中第一个'case'之前的代码

我在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;    
}
Run Code Online (Sandbox Code Playgroud)

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

小智 6

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

switch(value2) {
    printf("aaaaaaaaaaaaa\n");
    case 6:
Run Code Online (Sandbox Code Playgroud)

控制流立即跳转到标签,case 6:以便它跳过调用printf().

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

case 3:
    printf("aaaaa\n");
    switch (value2) {
Run Code Online (Sandbox Code Playgroud)

等等