C语言switch语句

在switch语句中,如果找到了满足的case情况,是不是就不再看之后的case而直接执行其所属的语句啊,直到遇到break或者switch结束?没理解错吧?

img

#include <stdio.h>

int main()
{
    int i = 2;
    int j;

    printf("请输入j的值:\n");
    scanf("%d", &j);
    switch (j)
    {
    case 1:
        printf("%d\n", i);
    case 'T':
        printf("%d\n", i + 1);
        j++;
        break;
        printf("这个语句不再执行!~\n");
    case 2:
        printf("%d\n", i + 2);
    case '3':
        printf("%d\n", 2 * j + 3);
    default:
        i--;
        printf("今天是周日!\n");
    case 5:
        printf("%d", i + 4);
        break;
    case '6':
        printf("%d", i + i);
    }
    /*
    1>在switch语句中,若case后面没有加break语句,则会从允许进行的语句开始,不再判断情况而直接执行后面的语句,
    直到执行到break语句(包含default语句中的break)或者执行完所有语句后跳出switch。
    2>所有语句只会执行一次,而不会因为default语句没有加break而继续执行default语句直到满足后面情况。
    */

    int c = 0, k;

    for (k = 1; k < 3; k++)
        switch (k)
        {
        default:
            c += k;
        case 3:
            c++;
            break;
        case 4:
            c += 2;
            break;
        }
    /*
    c = 0;
    k = 1, c = 1,执行case 3, c = 2;
    k = 2, c = 4,执行case 3, c = 5;
    */
    printf("%d", c);

    return 0;
}


题主理解正确。