输出是什么? gcc输出为0.请解释一下?

时间:2013-08-10 09:39:59

标签: c switch-statement

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);
}

3 个答案:

答案 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。

阅读Kernighan and Dennis M. Ritchie C Book