gcc编译器输出为0.为什么?不应该是3吗?
int main()
{
f(3);
return 0;
}
int f(int t)
{
int c;
switch(t)
{
case 2:
c=2;
case 3:
c=3;
case 4:
c=4;
case 5:
c=5;
default:
c=0;
}
printf("%d",c);
}
答案 0 :(得分:1)
因为您在每种情况下都缺少break;
语句。这导致控制落入以下案例陈述并最终落入default
案例。
答案 1 :(得分:1)
每个break
后需要case
:
switch(t)
{
case 2:
c=2;
break;
case 3:
c=3;
break;
case 4:
c=4;
break;
case 5:
c=5;
break;
default:
c=0;
break;
}
否则逻辑“流过”到其余的语句。因此,当交换机开始执行时,最初c
被分配3,但是它继续而没有break
到循环中的下一个语句,因此立即被分配4,5,然后是0。因此,值为0.如果您输入break
,则循环终止于该点,c
的值仍为3.
答案 2 :(得分:0)
交换机中没有break语句。并且控制流动直到开关盒结束。 t值为3,控制跳转到情况3,由于没有中断,后续行被执行。即c值从3变为4,5然后变为0。