-6

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

3 回答 3

1

因为您在每种情况下都缺少break;陈述。这导致控制落入以下案例陈述并最终落入default案例。

于 2013-08-10T09:42:48.573 回答
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;
}

否则,逻辑“流经”到其余的语句。因此,当 switch 开始执行时,最初c分配为 3,但随后它会继续break循环中的下一条语句,因此立即分配 4、5,然后是 0。因此最终值为 0。如果您输入break,然后循环在该点终止并且 的值c保持为 3。

于 2013-08-10T09:46:35.537 回答
0

switch 中没有 break 语句。并且控制流到开关盒结束。t 值为 3,控制跳转到 case 3,由于没有中断,因此执行后续行。即 c 值从 3 变为 4,5,然后变为 0。

阅读Kernighan 和 Dennis M. Ritchie C 的书

于 2013-08-10T09:43:21.590 回答