为什么这个 C 程序打印 6?

Jho*_*kra 0 c

我不明白为什么它打印6而不打印-8。如果我理解正确的话,x % 2等于所以0我必须寻找这种情况,0对吗?

#include <stdio.h>
#include <math.h>

int main(int argc, char *argv[]) {

    int x = 2;
    int a = 1;

    switch (x % 2 == 0) {
        case 3:
            a=a+3;
        case 0:
            a=a-4;
        case 6:
            a=a-5;
            break;
        case 7:
            a=a-2;
        case 1:
            a=a+2;
        case 4:
            a=a+3;
            break;
        case 9:
            a=a+4;
        case 8:
            a=a-2;
        case 5:
            a=a+3;
            break;
        case 2:
            a=a+1;
        default:
            a=a+4;
            break;
    }
    printf("%d\n", a);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Har*_*ith 8

对于x == 2switch(x%2 == 0)计算结果为switch(1),然后在 处继续执行case 1:,将 2 加到a,并且由于加法后没有跟任何break语句,因此执行会转到情况 4,将 3 加到a,然后在switch语句的右大括号处继续执行,并打印 6。