我在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
没有,为什么会这样?我们不应该在案件之前做点什么吗?
答案 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
语句之前。
答案 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
块的声明。