在编译并运行下面的代码时,我们得到了所述的输出。请解释输出。 case 2
嵌套在case 0
中,因此程序根本不应打印任何内容。
#include <stdio.h>
int main() {
int i=5;
switch ( 2 ) {
case 0:
for ( i=0; i<10; i++ ) {
case 1:
printf("A i=%d\n",i);
case 2:
printf("B i*i=%d\n",i*i);
};
case 3:
printf("done");
break;
}
return 0;
}
/* OUTPUT
B i*i=25
A i=6
B i*i=36
A i=7
B i*i=49
A i=8
B i*i=64
A i=9
B i*i=81
done
*/
答案 0 :(得分:7)
switch
语句只是跳转到for
循环的中间(case
标签2处)。然后代码执行for
循环。几乎相当于:
#include <stdio.h>
int main() {
int i=5;
goto label_2;
for ( i=0; i<10; i++ ) {
printf("A i=%d\n",i);
label_2:
printf("B i*i=%d\n",i*i);
};
label_3:
printf("done");
return 0;
}
这就是它的全部内容。
答案 1 :(得分:1)
for ( i=0; i<10; i++ ) {
case 1:
printf("A i=%d\n",i);
case 2:
printf("B i*i=%d\n",i*i);
};
因此情况2在for循环内部,因此在输出中重复。对于一个案例,您需要暂停或在它切换到的情况下执行每个案例。
switch(2)
case 1: //blah
case 2: //blah
case 3: //blah
对于上面的这个例子,情况2和3中的代码是运行的,而通常是你写的:
switch(2)
case 1: //blah
break;
case 2: //blah
break;
case 3: //blah
break;
在这种情况下只运行案例2