switch case语法
文章目录
- switch case组合
- 不要拿青龙偃月刀去削苹果
- case的作用是什么?
- break的作用是什么?
- case后面的值有什么要求吗?
- case语句的排列顺序问题
- default语句相关问题
- 使用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
语句。
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-4
的break
,看效果
可以看到,当我们输入1
的时候,case 1
开始执行,然后case 2
竟然也执行了,后续也执行,直到星期五结束后,没再执行。
当我们输入2
的时候,从case 2
开始执行,直到星期五结束。
可以发现,1-4
没有break
,而5
有break
,所以输出星期五执行,再执行break
,就不再执行下面的语句了。
这恰恰说明了上面case
的作用:决定了从哪开始执行语句。
但是现在的重点是break
,可以发现当没有break
时,会继续执行下一条case
语句,当遇到break
时,不再执行。
这恰恰就是break
的分支功能。
其实switch
语句是没有任何功能的,真正使得switch
结构实现类似if else
功能的是由于case
和break
语句的配合。
上面的程序还可以改造成如下:
//这就是多个不同的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;
}
关于break
还有一个很容易混淆的地方,就是一般人在一般情况下在case
后面要么不写break
,要么只写break
,万不得已不要写其它,特别是return
,极易有可能使得用户在调试时忽略,从而不能发现问题所在!!!
case后面的值有什么要求吗?
switch
语句必须是整型常量/整型变量/整型表达式
不能够是有效的布尔值,
int x = 10;
switch (0 == x)//因为这样得表达式,结果只有0/1,下面的case也只能是0/1才能够与之匹配
{default:break;
}
case
语句必须是整型常量/整型常量表达式,类似const
修饰的常量称为只读变量也不可以!
case语句的排列顺序问题
按字母或数字顺序排列各条case
语句
就像上面的程序,当所有case
语句作用相当,没有什么特别的重要性差别时,一般按顺序排列case
语句,像1、2、3、4或者A、B、C、D等等。
把正常情况放在前面,而把异常情况放在后面
也如同上面的程序,我们把正常的星期一到星期七写在前面,而把退出写在最后。
按执行频率排列case
语句
将使用频率高的case
语句放在前面,就如同把畅销货放在售卖最显眼的地方一样。这样可以使得我们在调试(一般是频率较高的)时,能快速的找到该case
语句。
default语句相关问题
先说一句,default
语句可写可不写,但是,强烈建议无论如何都写上。这就谈到default
语句的作用了。
作用:当所有的case
语句都不与switch
语句匹配时,这时执行default
语句。强烈建议写在最后!!!
default
语句的位置是非常自由的
但是有一点,当case
入口已开启,且没有break
,且default
紧随其后,也是会执行default
语句的
但是还要再说一遍:强烈建议无论如何都加上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
后定义变量是不可以的,如果非要定义变量,那么就得加{}
当然了,即使是这样的写法,也是非常不建议的,强烈建议封装成函数!!!
不要为了使用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
比如说输入错误。
switch case语法相关推荐
- c语言switch case缩进,C语言中的switchnbsp;casenbsp;语句的用法详解
本文就几个实例来说明Switch case 语句的用法. 说是C语言中的Switch case,其实和html+javascript中的Switch case语法是基本一样的哦. 问题: 有这么一个C ...
- switch case语句
switch case语句 switch case语法 switch case语法 switch(expression){case value ://语句break; //可选case value : ...
- Javascript switch...case比较语法
switch-case,是全等比较 === 语法: switch(表达式){ case 值1: 代码块1; break; case 值2: 代码块2; break; . . . case 值n: 代码 ...
- Switch case 使用及嵌套语法
目录 switch case 语句讲解 Switch 也可以嵌套 switch case 语句讲解 代码中 虽然没有 限制 if else 能够处理的 分支 数量 ,但当分支过多时 , 用 if e ...
- switch case 支持的 6 种数据类型!
2019独角兽企业重金招聘Python工程师标准>>> 有粉丝建议可以偶尔推送一些 Java 方面的基础知识,一方面可以帮助一初学者,也可以兼顾中高级的开发者. 那么今天就讲一下 J ...
- 【MATLAB】流程控制 ( 循环结构 | for 循环 | while 循环 | 分支结构 | if end 分支结构 | if else end 分支结构 | switch case 分支结构 )
文章目录 一.MATLAB 流程控制结构 二.for 循环 1.for 循环 2.嵌套 for 循环 三.while 循环 二.分支结构 1.if end 分支结构 2.if else end 分支结 ...
- python中case的用法_用 Python 实现简单的 switch/case 语句
在Python中是没有Switch / Case语句的,很多人认为这种语句不够优雅灵活,在Python中用字典来处理多条件匹配问题字典会更简单高效,对于有一定经验的Python玩家不得不承认,的确如此 ...
- switch case 支持的 6 种数据类型
转载自 switch case 支持的 6 种数据类型 那么今天就讲一下 Java 中的 switch case 语句吧,有忘记的同学正好可以温习一下. Java 中 switch case 语句用 ...
- 有了 elseif 为什么还要 switch case
引出 你有没有想过既然有了if elseif, 为什么还要设计一个switch case的语法出来呢? 按理说, 一个语言的设计角度来说, 关键词越少越好吧, 而且多出来一种选择分支也没有看出太大用处 ...
最新文章
- Oracle instant client安装与设置 - Windows版,可用WIN7
- Json model的工作原理 what has happened when you setModel to a view
- 【VB.NET】VB.NET数据库技术问题的解答
- Android_Kotlin原生开发_声明变量与内置数据类型---Kotlin工作笔记002
- 史上最壕无人车买家诞生!泥潭中的Uber要搞个超大的无人出租车队
- python官网的软件-python软件怎么用
- Datatables+Bootstrap
- Atitit 人工智能体系树培训列表应用较为广泛的技术.docx Atitit 人工智能体系培训列表 目录 1. 1.NLP自然语言处理文本处理	2 1.1. 语言理解 分词	2 1.2. 抽取
- 不用U盘从linux重装win系统,不用U盘和光盘安装win7旗舰版系统
- indesign在python中是什么意思_用Python做深度学习一:数学基础帖子详情 - 网易云课堂...
- AutoLeaders控制组——51单片机学习笔记(LED点阵屏、DS1302时钟芯片)
- ISO三体系,招投标企业认证最多的资质
- 内存管理两部曲之物理内存管理
- 极智Paper | YOLOv7 更高 更快 更强
- 自动驾驶算法详解(8):特斯拉Tesla决策规划算法Planning解析下
- 一位散户高手的炒股心得
- 他山之石:a16z 的 Web3 投资版图
- Ardublockly学习— —安装篇(一)
- 关于解决win7远程桌面已停止工作错误
- RemoteCall全新推出网页版,不安装软件也能远程技术支持
热门文章
- 独立站运营 | Shopify店铺使用聊天机器人的好处
- vue-tinymce的使用,粘贴文件上传,自定义文件上传,改base64转换成上传到服务器返回url
- 复习一波HashMap底层实现原理解析
- html常用标签图文详解
- 元空间不足java.lang.OutOfMemoryError: PermGen space 错误的原因及解决方法
- 二分查找算法代码详细理解
- 【小知识】讲一讲软件无线电Software-Defined Radio
- 4步打造出完美的社群运营的秘籍
- 什么是SEO,企业做SEO优化有哪些好处
- USB Type-C E-Marker