C语言switch函数如何运行的?

请问大佬为什么这个错误的C程序输出出来会是00133
#include<stdio.h>
void main()
{
int a=0;
switch(a)
{
case 0:printf("%d",a);
case 1:printf("%d",a++);
case 2:printf("%d",a++);
case 3:printf("%d",++a);
default:printf("%d",a);
}
}

#include<stdio.h>
void main()
{
int a=0;
switch(a)
{
case 0:printf("%d",a);//一开始a为0 0->0
case 1:printf("%d",a++);//先输出后自增 0->1
case 2:printf("%d",a++);//a在上一条结束后自增为1,先输出后自增 1->2
case 3:printf("%d",++a);//先自增后输出,2->3后输出 3
default:printf("%d",a);//输出3
}
}

有帮助望采纳

每个case结束加break;
不然case 0到 default中的语句全部都会执行的