Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么这个代码打印0223?_C++_C_For Loop_Switch Statement - Fatal编程技术网

C++ 为什么这个代码打印0223?

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

为什么案例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不会计算两次:它只计算一次。但是,如果不使用
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