switch case语法

switch case组合

基本语法结构

switch(整型常量/整型变量/整型表达式){
    case var1:
        break;
    case var2:
        break;
    case var2:
        break;
    default:
        break;
}

不要拿青龙偃月刀去削苹果

既然已经有了if else分支语句,那为什么还要switch 语句呢?

switch 语句也是一种分支语句,常常用于多分支的情况。这种多分支,一般指的是很多很多分支,而且判定条件主要以整型为主:

如:输入数字,输出相应的星期几

#include <stdio.h>
int main()
{
	int day = 0;
	do
	{
		printf("请输入:>");
		scanf("%d", &day);
		switch (day) {
		case 1:
			printf("星期一\n");
			break;
		case 2:
			printf("星期二\n");
			break;
		case 3:
			printf("星期三\n");
			break;
		case 4:
			printf("星期四\n");
			break;
		case 5:
			printf("星期五\n");
			break;
		case 6:
			printf("星期六\n");
			break;
		case 7:
			printf("星期七\n");
			break;
		case 0:
			printf("退出\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
	} while (day);
	return 0;
}

以上的程序,如果用if else来写,会非常的繁琐!

case的作用是什么?

case本质是进行判定功能,与switch里面的语句相比较,如果相同,则执行语句,不相同则找下一个case比较,直至所有case语句都不与switch相同,此时执行default语句。

image-20220603215700927

case决定了从哪开始执行语句,所以说case是判定功能

break的作用是什么?

break本质是执行分支功能

具体效果看上面图片

那如果没有break会发生什么呢?

#include <stdio.h>
int main()
{
	int day = 0;
	do
	{
		printf("请输入:>");
		scanf("%d", &day);
		switch (day) {
		case 1:
			printf("星期一\n");
		case 2:
			printf("星期二\n");
		case 3:
			printf("星期三\n");
		case 4:
			printf("星期四\n");
		case 5:
			printf("星期五\n");
			break;
		case 6:
			printf("星期六\n");
			break;
		case 7:
			printf("星期七\n");
			break;
		case 0:
			printf("退出\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (day);
	return 0;
}

我们删除了1-4break,看效果

image-20220603220227329

可以看到,当我们输入1的时候,case 1开始执行,然后case 2竟然也执行了,后续也执行,直到星期五结束后,没再执行。

当我们输入2的时候,从case 2开始执行,直到星期五结束。

可以发现,1-4没有break,而5break,所以输出星期五执行,再执行break,就不再执行下面的语句了。

这恰恰说明了上面case的作用:决定了从哪开始执行语句。

但是现在的重点是break,可以发现当没有break时,会继续执行下一条case语句,当遇到break时,不再执行。

这恰恰就是break的分支功能。

其实switch语句是没有任何功能的,真正使得switch结构实现类似if else功能的是由于casebreak语句的配合。

上面的程序还可以改造成如下:

//这就是多个不同的case,想执行同一条语句的做法
#include <stdio.h>
int main()
{
	int day = 0;
	do
	{
		printf("请输入:>");
		scanf("%d", &day);
		switch (day) {
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			printf("周内\n");
			break;
		case 6:
		case 7:
			printf("周末\n");
			break;
		case 0:
			printf("退出\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (day);
	return 0;
}

image-20220603221102287

关于break还有一个很容易混淆的地方,就是一般人在一般情况下在case后面要么不写break,要么只写break,万不得已不要写其它,特别是return,极易有可能使得用户在调试时忽略,从而不能发现问题所在!!!

case后面的值有什么要求吗?

switch语句必须是整型常量/整型变量/整型表达式

不能够是有效的布尔值,

int x = 10;
switch (0 == x)//因为这样得表达式,结果只有0/1,下面的case也只能是0/1才能够与之匹配
{
default:
	break;
}

case语句必须是整型常量/整型常量表达式,类似const修饰的常量称为只读变量也不可以!

image-20220603222100891

case语句的排列顺序问题

按字母或数字顺序排列各条case语句

就像上面的程序,当所有case语句作用相当,没有什么特别的重要性差别时,一般按顺序排列case语句,像1、2、3、4或者A、B、C、D等等。

把正常情况放在前面,而把异常情况放在后面

也如同上面的程序,我们把正常的星期一到星期七写在前面,而把退出写在最后。

按执行频率排列case语句

将使用频率高的case语句放在前面,就如同把畅销货放在售卖最显眼的地方一样。这样可以使得我们在调试(一般是频率较高的)时,能快速的找到该case语句。

default语句相关问题

先说一句,default语句可写可不写,但是,强烈建议无论如何都写上。这就谈到default语句的作用了。

作用:当所有的case语句都不与switch语句匹配时,这时执行default语句。强烈建议写在最后!!!

default语句的位置是非常自由的

image-20220603224310309

但是有一点,当case入口已开启,且没有break,且default紧随其后,也是会执行default语句的

image-20220603224514923

但是还要再说一遍:强烈建议无论如何都加上default语句,并且写在最后!!!

使用case语句的一些注意事项

简化每种情况对应的操作

也就是说,在case语句和break语句中间的语句,越简洁越好,

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n)
	{
	case 1:
		printf("hello world!\n");
		printf("hello world!\n");
		printf("hello world!\n");
		printf("hello world!\n");
		break;
	case 2:
		break;
	case 3:
		break;
	default:
		break;
	}
	return 0;
}

假设case中有四条语句,尽量将这些语句封装成一个函数,使得case中的语句尽量简洁

#include <stdio.h>
void show() {
	printf("hello world!\n");
	printf("hello world!\n");
	printf("hello world!\n");
	printf("hello world!\n");
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n)
	{
	case 1:
		show();
		break;
	case 2:
		break;
	case 3:
		break;
	default:
		break;
	}
	return 0;
}

还有一点,在case后定义变量是不可以的,如果非要定义变量,那么就得加{}

image-20220604082852335

当然了,即使是这样的写法,也是非常不建议的,强烈建议封装成函数!!!
不要为了使用case语句而刻意制造一个变量

#include <stdio.h>
int main()
{
	for (int i = 0; i < 10; i++) {
		int tmp = i;//这里的tmp就是刻意制造的变量,非常不建议这样干
		switch (tmp)
		{
		default:
			break;
		}
	}
	return 0;
}

应该是这样

#include <stdio.h>
int main()
{
	for (int i = 0; i < 10; i++) {
		switch (i)//这样会比上面好很多
		{
		default:
			break;
		}
	}
	return 0;
}

default子句只用于检查真正的默认情况

有时候,只剩下最后一种情况需要处理,但是你却偷懒,没有用case处理这种情况,而是交给了default,这样是非常不妥的,比如说,上面那个星期一到星期七的程序,我们只用case处理了星期一至六,而把星期七交给了default是非常不好的。因为这样将失去case语句的标号所提供的自说明功能,而且丧失了使用default子句处理错误情况的能力。所以我们不能够偷懒去少写代码,而应该真正用case处理每一种情况,而将真正的默认情况交给defualt比如说输入错误。

云朵c
关注 关注
  • 192
    点赞
  • 668
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
JavaScript switch case用法实例[范围]
10-29
JavaScript switch case用法实例,大家可以参考下。
switch-case语句用法
08-15
if语句处理两个分支,处理多个分支时需使用if-else-if结构,但如果分支较多,则嵌套的if语句层就越多,程序不但庞大而且理解也比较困难.因此,C语言又提供了一个专门用于处理多分支结构的条件选择语句,称为switch语句,又称开关语句.
switch 语法运用
最新发布
2301_80107415的博客
08-01 1193
switch跟if语句一样,都是分支语句,if语句上一篇文章介绍过了,有不了解的可以去看一下上一篇文章.代码中有重复执行的代码但是执行的条件不一样,我们可以利用break的特性来进行简便代码。通过每局的输赢进行++通过变量渲染到页面中。重新开始:把变量和所有数据初始化。
java中的switch case
aysk1112的博客
01-01 423
switch-case语句格式如下 switch(变量){ case 变量值1: //; break; case 变量值2: //...; break; ... case default: //...; break; } switch()变量类型只能是int、short、char、byte和enum类型...
switch case语句用法详解
热门推荐
BestEternity的博客
05-21 6万+
switch “开关”的意思,是一种“选择”语句,它用法非常简单。switch 是多分支选择语句。说得通俗点,多分支就是多个 if语句的组合。从功能上说,switch 语句和 if 语句完全可以相互取代。但从编程的角度,它们又各有各的特点,所以至今为止也不能说谁可以完全取代谁。 当嵌套的 if 比较少时(三个以内),用 if 编写程序会比较简洁。但是当选择的分支比较多时,嵌套的 if 语句层数就...
switch case 语句(详细)
微微的猪食小窝
10-24 4053
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。switch 语句是非常的基础的知识,掌握起来也不难掌握,语法比较简单。但大部分人基本是知其然,不知其所以然。譬如 早期JDK只允许switch的表达式的值 int及int类型以下的基本类型,后期的JDK却允许匹配比较 字符串、枚举类型。 switch case 执行时,一定会先进行匹配,匹配成功返回当前 case 的值,再根据是否有 break,判断是否继续输出,或是跳出判断。
switch case 语法
06-01
switch case 语法是一种条件语句,它允许根据一个表达式的值来选择执行的代码块。其基本语法如下: ``` switch(expression) { case value1: // 在 expression 等于 value1 时执行的代码 break; case value2: /...
go语言的switch case语法
01-23
Go语言的switch case语法可以用于根据不同的条件执行不同的代码块。与其他语言相比,Go语言的switch case语法有以下几个特点: 1. 基本用法: ```go switch 变量 { case 值1: // 执行代码块1 case2: // 执行...
switch case语法的具体用法
08-19
Switch case语法用于比较一个表达式和一系列可能的值,然后根据匹配的值执行相应的代码块。其基本用法如下: switch(expression) { case value1: // 代码块1; break; case value2: // 代码块2; break; ...
switch case语法具体实例
03-10
switch case语法是一种多分支选择结构,可以根据不同的条件执行不同的代码块。具体实例可以看下面的代码: ``` int num = 2; switch(num){ case 1: printf("num is 1"); break; case 2: printf("num is 2"); ...
Switch case 使用及嵌套语法
Mr.小灰狼_随笔
07-28 5万+
Switch case 使用及嵌套语法 目录 switch case 语句讲解 Switch 也可以嵌套 ​ 代码中 虽然没有 限制if else 能够处理的 分支 数量 ,但当分支过多时 , 用 if else 处理会不太方便 ,而且容易出现 if else 配对出错的情况 。 所以 对于这种情况 ,实际开发中一般使用 switch 语句代替...
switch-case
时光里的博客
05-02 2万+
switch语句
switch case语句用法
月来better
12-18 2483
一般情况下,判断语句常用的有if…else,三目运算符,还有switchcase等,根据不同需求使用其判断语句。 下面以简单示例展示:在输入框中输入数字,判断其星期几 HTML: <input type="text" id="week" /> JS: 第一种写法: <script src="../libs/jquery/jquery-3.4.1.min.js"></script> <script> $("#week").blur(functio
switch case语句语法
dajiangyou123456的博客
02-27 640
一般形式: switch(表达式){ case 常量表达式1: 语句1; case 常量表达式2: 语句2; … case 常量表达式n: 语句n; default: 语句n+1; } 意思是先计算表达式的值,再逐个和case 后的常量表达式比较,若不等则继续往下比较,若一直不等,则执行default后的语句;若等于某一个常量表达式,则从这个表达式后的语句开始执行,并执行后面所有case后的语句。...
浅谈switch-case语法和应用
leleyuan1130的博客
08-22 844
Switch-Case语法:     switch (整型/字符型表达式) {         case 值1:{              语句1             break;         }          case 值2:{          语句2          break;          }            ......
switch ... case语句的用法
usstmiracle的博客
03-06 1万+
当情况大于或等于4种的时候就用switch ... case语句 switch(表达式) { case 常量1: 语句体1; case 常量2: 语句体2; case 常量3: 语句体3; case 常量4: 语句体4; .... default : 语句体; } switch ... case语句的执行过程: 1、把要讨论的表达式与case后面的常量进行比较,发...
写文章

热门文章

  • switch case语法 116201
  • yum详细教程(理解、使用、yum源) 4548
  • 插入排序超详细讲解C语言 4379
  • 负数如何取模?深度理解取模:取余运算 3661
  • #define 定义常量和宏 2958

最新评论

  • 【ROS2】安装与测试

    普通网友: 干货满满,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • Ubuntu 根目录扩容

    普通网友: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,文章思路清晰【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • vector的实现和使用中的常见错误

    云朵c: 使用 erase 函数时的迭代器失效那里的图片显示的用法 ++it 那写错了,正确的应该改法应该是 else { ++it; }

  • 快速排序递归与非递归超详细讲解C语言

    已有之事: 非递归版本有错误

  • 【进程间通信】共享内存(Shared Memory)

    xc13262215230: 可以快速了解共享内存,不错

大家在看

  • 布草洗涤必备4张表-———未来之窗行业应用跨平台架构
  • 【深度学习】Transformer机器翻译模型,了解有关机器翻译的知识,seq2seq架构,掌握使用Transformer构建机器翻译模型的实现过程 576
  • 【学习笔记】手写 Tomcat 五 57
  • 第二章 网页制作的排版方法 550
  • 京东返利APP的高并发与高可用架构设计 2372

最新文章

  • 安装 Gazebo 基于 Arm64 Ubuntu 22.04
  • 【ROS2】节点
  • 【ROS2】功能包
2024年7篇
2023年26篇
2022年80篇

目录

目录

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云朵c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

玻璃钢生产厂家广州哪里的玻璃钢雕塑茂名玻璃钢雕塑哪里买衢州玻璃钢雕塑怎么样价格合理佛山发光动物玻璃钢雕塑大型玻璃钢南瓜屋雕塑河北欧式玻璃钢雕塑设计盐城玻璃钢广场雕塑厂家玻璃钢雕塑服务商赞歌玻璃钢雕塑清远主题玻璃钢雕塑批发报价景洪玻璃钢人物雕塑北京大型商场美陈厂家供应玻璃钢雕塑专卖玻璃钢雕塑表面上色宁德玻璃钢关公雕塑广州商场美陈布置珠海玻璃钢卡通雕塑石家庄抽象玻璃钢雕塑生产厂家河北周边玻璃钢花盆曲阳玻璃钢工艺雕塑公仔玻璃钢卡通雕塑尺寸陕西玻璃钢校园雕塑人物迎宾户外园林玻璃钢雕塑杭州新款玻璃钢座椅雕塑瑞金玻璃钢雕塑湛江内销玻璃钢雕塑遂宁玻璃钢雕塑定制无锡玻璃钢鹿雕塑价格湖州玻璃钢雕塑厂家价格广东玻璃钢牛动物雕塑制作工厂香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化