switch...case...default...执行顺序

首先,switch执行规则是:

判断case后面的表达式和switch后面的表达式是否相匹配,一旦case匹配,就会顺序执行后面的所有的程序代码(不管后面的case是否匹配,都执行),直到遇见break或者语句块结束。

其次,说说我的结论把default当做一个特殊的case语句(default的条件为:switch中的值不满足其他任何case),按照上述switch处理case语句的规则执行即可(也就是执行结果和顺序、break有关)


下面分5种情况讨论,主函数如下:

也就是x依次从0到6,看看switch...case...default...语句的运行结果。

void main()
{
	int x=0;

	printf("choice1:\n");
	for(x=0;x<=6;x++)
	{
		printf("\nx=%d\n",x);
		choice1(x);
	}

	printf("\nchoice2:\n");
	for(x=0;x<=6;x++)
	{
		printf("\nx=%d\n",x);
		choice2(x);
	}

	printf("\nchoice3:\n");
	for(x=0;x<=6;x++)
	{
		printf("\nx=%d\n",x);
		choice3(x);
	}

	printf("\nchoice4:\n");
	for(x=0;x<=6;x++)
	{
		printf("\nx=%d\n",x);
		choice4(x);
	}

	printf("\nchoice5:\n");
	for(x=0;x<=6;x++)
	{
		printf("\nx=%d\n",x);
		choice5(x);
	}
}


(1)case中没有break语句,default放在最后,根据执行规则即可。

void choice1(int x)
{
	switch(x)
	{
	case 1: printf("1:%d\n",x);
	case 2: printf("2:%d\n",x);
	case 3: printf("3:%d\n",x);
	case 4: printf("4:%d\n",x);
	case 5: printf("5:%d\n",x);
	default: printf("default:%d\n",x);
	}
}


(2)case中有break语句,default放在最后,根据执行规则即可。

void choice2(int x)
{
	switch(x)
	{
	case 1: printf("1:%d\n",x);break;
	case 2: printf("2:%d\n",x);break;
	case 3: printf("3:%d\n",x);break;
	case 4: printf("4:%d\n",x);break;
	case 5: printf("5:%d\n",x);break;
	default: printf("default:%d\n",x);
	}
}

(3)case中没有break语句,default放在最前面

void choice3(int x)
{
	switch(x)
	{
	default: printf("default:%d\n",x);
	case 1: printf("1:%d\n",x);
	case 2: printf("2:%d\n",x);
	case 3: printf("3:%d\n",x);
	case 4: printf("4:%d\n",x);
	case 5: printf("5:%d\n",x);	
	}
}
运行结果如下:
choice3:

x=0
default:0
1:0
2:0
3:0
4:0
5:0

x=1
1:1
2:1
3:1
4:1
5:1

x=2
2:2
3:2
4:2
5:2

x=3
3:3
4:3
5:3

x=4
4:4
5:4

x=5
5:5

x=6
default:6
1:6
2:6
3:6
4:6
5:6

和我的结论符合,当x=0或者x=6时,不满足其他case条件(1~5),执行default语句,因为没有break语句,所以从default开始一直执行到最后。


(4)case中有break语句,default放在最前面,但是default语句没有break,所以如果default语句满足的话,也会执行case 1后面的语句直到break

void choice4(int x)
{
	switch(x)
	{
	default: printf("default:%d\n",x);
	case 1: printf("1:%d\n",x);break;
	case 2: printf("2:%d\n",x);break;
	case 3: printf("3:%d\n",x);break;
	case 4: printf("4:%d\n",x);break;
	case 5: printf("5:%d\n",x);break;	
	}
}
运行结果如下:

choice4:

x=0
default:0
1:0

x=1
1:1

x=2
2:2

x=3
3:3

x=4
4:4

x=5
5:5

x=6
default:6
1:6

(5)case中有break语句,default放在最前面,default语句也有break。这时候default的位置就没有任何关系了。就相当于无论如何,只能执行一种case情况(default是特殊的case)。

void choice5(int x)
{
	switch(x)
	{
	default: printf("default:%d\n",x);break;
	case 1: printf("1:%d\n",x);break;
	case 2: printf("2:%d\n",x);break;
	case 3: printf("3:%d\n",x);break;
	case 4: printf("4:%d\n",x);break;
	case 5: printf("5:%d\n",x);break;	
	}
}

运行结果如下:

choice5:

x=0
default:0

x=1
1:1

x=2
2:2

x=3
3:3

x=4
4:4

x=5
5:5

x=6
default:6
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值