switch语句

1.switch语句中的break

        除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。 switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重 的 else if 改成更易⽤、可读性更好的形式。

        练:输⼊任意⼀个整数值,计算除3之后的余数

#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n % 3)
	{
	case 0:
		printf("整除,余数为0\n");
	
	case 1:
		printf("余数是1\n");
	
	case 2:
		printf("余数是2\n");
	
	}
	return 0;
}

我们会发现输入一个8看看,似乎一切正常

但是我们再试试输入1、2、3就能发现其中的猫腻了

我们发现,1除以3本来余数是1,但是我们发现程序运⾏的结果多了⼀⾏“余数是2”的打印,后两种情况同理,这是为何?

原来switch语句也是有分⽀效果的,我们是从switch(n % 3 )其中(n % 3 )的结果是几,而决定我们从case几进去(决定入口)因此,如果我们不会停下来的话 如同我从case 0 进去不停下,然后case 1,case 2 我也会进去,因此就成为了这个情况(如下图)

同理,如果我从case 1进入,那么case 2也会被我进入,当你输入的数字刚好只进入case 2时,这就成为了偶然性,如最开始输入的8,因此导致我们误以为代码正常。

只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续往下执⾏,有可能执⾏其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。

就像这样:

#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);

	switch (n % 3)
	{
	case 0:
		printf("余数为0\n");
		break;
	case 1:
		printf("余数是1\n");
		break;
	case 2:
		printf("余数是2\n");
		break;
	}
	return 0;
}

这时候我们输入1 、2、3看看

问题解决,所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。 当然, break 也不是每个 case 语句都必须有,这就得根据实际问题来看了。

注:(1)case 和后边的数字之间必须有空格。

(2)每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。

(3)switch语句也有分⽀效果。

2.switch语句中的default

        在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹 配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊ default ⼦句。

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);

	switch (n)
	{
	case 1:		
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;

	case 6:
	case 7:
		printf("周末\n");
		break;
	
	default:
		printf("输⼊错误\n");
		break;

	}
	return 0;
}

在上一段代码中可见用户的输入范围只能在1~7之间,如果我们不加入default子语句则什么也不会输出,但我们加入之后会出现什么情况呢?比如说我们输入一个数字8看看。

这时显示输入错误,且不会影响到1~7数字的正常运行。

2.1 switch语句中的case和default的顺序问题

        在 switch 语句中 case ⼦句和 default ⼦句有要求顺序吗? default 只能放在最后吗? 其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实际需求的就行,不过我们通常是将要 default ⼦句放在最后处理的。

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值