1

可能重复:
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;    
}

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

4

5 回答 5

6

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

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

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

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

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

等等

于 2012-12-28T15:20:05.837 回答
0

“aaaaaaaaaaaaa”没有出现,因为它放错了位置(它不包含在标签中,因此无法访问)。您需要将其移至第二个 switch 语句之前:

case 3:
    printf("aaaaaaaaaaaaa\n");
    switch(value2)
    {
        // body
    }
于 2012-12-28T15:18:07.830 回答
0

printf语句中对函数的调用:

printf("aaaaaaaaaaaaa\n");

无法到达,因为它在case第二个的第一个语句之前switch

请参阅switch 语句中第一个“案例”之前的代码

于 2012-12-28T15:18:33.740 回答
0

"aaaaaaaaaaaaa\n" 没有在任何case. 您的代码结构不正确。

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

printf("aaaaaaaaaaaaa\n");
switch(value2)
{
    case 6:
        printf("bbbbbbbbbbbb\n");
        printf("value2 is found!\n");
        break;
}
break;
于 2012-12-28T15:19:42.373 回答
0

switch 总是寻找case,这就是为什么aaaaaaaaaaaa被跳过。它将执行相关case块的语句。

于 2012-12-28T15:20:33.750 回答