0


switch case语法

文章目录

switch case组合

基本语法结构

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

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

既然已经有了

if else

分支语句,那为什么还要

switch 

语句呢?

switch 

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

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

#include<stdio.h>intmain(){int day =0;do{printf("请输入:>");scanf("%d",&day);switch(day){case1:printf("星期一\n");break;case2:printf("星期二\n");break;case3:printf("星期三\n");break;case4:printf("星期四\n");break;case5:printf("星期五\n");break;case6:printf("星期六\n");break;case7:printf("星期七\n");break;case0:printf("退出\n");break;default:printf("输入错误,请重新输入\n");break;}while(day);return0;}

以上的程序,如果用

if else

来写,会非常的繁琐!

case的作用是什么?

case

本质是进行判定功能,与

switch

里面的语句相比较,如果相同,则执行语句,不相同则找下一个

case

比较,直至所有

case

语句都不与

switch

相同,此时执行

default

语句。

image-20220603215700927

case

决定了从哪开始执行语句,所以说

case

是判定功能

break的作用是什么?

break

本质是执行分支功能

具体效果看上面图片

那如果没有

break

会发生什么呢?

#include<stdio.h>intmain(){int day =0;do{printf("请输入:>");scanf("%d",&day);switch(day){case1:printf("星期一\n");case2:printf("星期二\n");case3:printf("星期三\n");case4:printf("星期四\n");case5:printf("星期五\n");break;case6:printf("星期六\n");break;case7:printf("星期七\n");break;case0:printf("退出\n");break;default:printf("输入错误,请重新输入\n");break;}}while(day);return0;}

我们删除了

1-4

break

,看效果

image-20220603220227329

可以看到,当我们输入

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>intmain(){int day =0;do{printf("请输入:>");scanf("%d",&day);switch(day){case1:case2:case3:case4:case5:printf("周内\n");break;case6:case7:printf("周末\n");break;case0:printf("退出\n");break;default:printf("输入错误,请重新输入\n");break;}}while(day);return0;}

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>intmain(){int n =0;scanf("%d",&n);switch(n){case1:printf("hello world!\n");printf("hello world!\n");printf("hello world!\n");printf("hello world!\n");break;case2:break;case3:break;default:break;}return0;}

假设

case

中有四条语句,尽量将这些语句封装成一个函数,使得

case

中的语句尽量简洁

#include<stdio.h>voidshow(){printf("hello world!\n");printf("hello world!\n");printf("hello world!\n");printf("hello world!\n");}intmain(){int n =0;scanf("%d",&n);switch(n){case1:show();break;case2:break;case3:break;default:break;}return0;}

还有一点,在

case

后定义变量是不可以的,如果非要定义变量,那么就得加

{}

image-20220604082852335

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

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

应该是这样

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

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

有时候,只剩下最后一种情况需要处理,但是你却偷懒,没有用

case

处理这种情况,而是交给了

default

,这样是非常不妥的,比如说,上面那个星期一到星期七的程序,我们只用

case

处理了星期一至六,而把星期七交给了

default

是非常不好的。因为这样将失去

case

语句的标号所提供的自说明功能,而且丧失了使用

default

子句处理错误情况的能力。所以我们不能够偷懒去少写代码,而应该真正用

case

处理每一种情况,而将真正的默认情况交给

defualt

比如说输入错误。


本文转载自: https://blog.csdn.net/qq_67569905/article/details/125118503
版权归原作者 云朵c 所有, 如有侵权,请联系我们删除。

“switch case语法”的评论:

还没有评论