C++ 为什么这个代码打印0223?
为什么案例2在这个for循环中得到两次评估C++ 为什么这个代码打印0223?,c++,c,for-loop,switch-statement,C++,C,For Loop,Switch Statement,为什么案例2在这个for循环中得到两次评估 for (int x = 0; x <4; x++) { switch (x) { case 2: printf("%d", x); case 0: printf("%d", x); default: break; case 3: printf("%d", x); } } for(int x=0;xcase2不会计算两次:它只计算一次。但是,如果不使用bre
for (int x = 0; x <4; x++)
{
switch (x)
{
case 2: printf("%d", x);
case 0: printf("%d", x);
default: break;
case 3: printf("%d", x);
}
}
for(int x=0;xcase2不会计算两次:它只计算一次。但是,如果不使用break
语句结束一个Case,则不会离开开关,而是继续执行下一个Case
换句话说,当x
为2时,执行跳转到case2
并调用printf(“%d”,x)
,x=2。然后,执行转到case0,并调用printf(“%d”,x)
,x仍然等于2。然后,执行进入默认
案例,它点击中断
语句,最后离开开关
,它没有。这些案例没有中断。这就是为什么它先打印案例2,然后打印案例0。您想在每个案例的末尾添加中断
de>。否则它将无法按预期工作,并在找到中断之前命中每个案例。因此,当x=2时,即使条件不满足,案例0也会执行?在C中,案例
不是保护执行的条件。它更像是一个转到标签。@Ozymandias案例0
编码在下面e> 案例2
。如果没有中断
,从案例2
开始的执行流将进入案例0
。交换案例的顺序,当x=2
时,您将不再看到执行案例0
,但当x=0
时,您将看到执行案例2