当前位置:网站首页>深入C语言(4)——switch的定义与使用
深入C语言(4)——switch的定义与使用
2022-07-29 03:25:00 【据说这是zzy】
深入C语言(4)——switch的定义与使用
全文中使用的C标准为C99,ANSI C,如果没有特别说明默认为此。
C++则是Dev 5.7.1的C++版本。
C的Switch和case
常见语法:
switch (expression)
statement
其中expression的结果必须是整数值。
尽管直接使用一条语句也是可以的,但结果效果如下:
switch (expression)
{
statement-list
}
贯穿于statement-list 的标签如下:
case constant-expression:
每一个case标签必须具有一个唯一的值:
常量表达式(constant-expression),constant-expression指的是编译期间进行求值的表达式,他不能是任何变量。
case与执行流
case语句最特殊的点在于,它并不把语句划分成几个执行部分,而是通过case来确定语句列表的进入点。
执行过程如下:
- 计算完成expression的内容。
- 执行流转到语句列表中其case标签值与expression值匹配的语句。
- 从上一条语句执行开始,一直到switch-case的底部。
这里面的语句均会被执行。
举个例子:
switch (month)
{
case 12:
printf("%d",12);
case 11:
printf("%d",11);
}
结果呢,可能和你想象的不一样。
当month等于12的时候,结果如下:
1211
这就是执行流造成的结果,导致case标签后边的语句都会被执行,包括其他的case。
那么可以实现将代码划分为不同的部分的功能吗?当然有,break语句就是。
break语句
break语句使用很简单,就是让case流在不同的位置停下来。让switch以更传统的方式运行。
使用方法如下:
switch (month)
{
case 12:
printf("%d",12);
break;
case 11:
printf("%d",11);
case 10:
printf("%d",10);
}
结果如下:
12
12
--------------------------------
Process exited after 4.971 seconds with return value 0
请按任意键继续. . .
break的习惯
需要提醒的是,最后的case的需要break吗?理论上来说传统的break语法中,我们不需要在最后的case中添加break。因为没有case会继续执行,但是为了未来修改的一致性,我们还是在最后加上break,以后添加case选项的时候就不需要补充了。
为了让不同的表达式值时能够执行,可以使多个case标签对应,如下所示:
switch (month)
{
case 12:
printf("%d",12);
break;
case 11:
case 10:
printf("%d %d",10,11);
break;
}
结果如下:
11
1011
--------------------------------
10
1011
--------------------------------
default子句
如果存在一种情况,所有case的标签值都不匹配,但是你想找一个兜底的条件,就可以使用default子句,把下面的标签放到case可以出现的位置。
default:
也就是说你可以这样写:
switch (month)
{
case 12:
printf("%d",12);
break;
default :
printf("%s","default");
case 11:
case 10:
printf("%d %d",10,11);
break;
}
结果如下:
9
default1011
--------------------------------
这样就丧失了default的意义,不过还是很有趣hhhh。
边栏推荐
- Self study notes on Apache file management -- mapping folders and configuring Apache virtual machines based on single IP and multi domain names
- Sleuth+Zipkin 来进行分布式服务链路的追踪
- 04 | background login: login method based on account and password (Part 1)
- How to realize shortcut keys for interface scaling by vscade
- Sanzi chess (player + computer)
- Asynchronous callback future mode of concurrent mode
- C traps and defects Chapter 3 semantic "traps" 3.3 array declaration as parameters
- 多行文本省略
- Configure vscade to realize ROS writing
- AI platform, AI midrange architecture
猜你喜欢

「PHP基础知识」输出圆周率的近似值

【C】 Array
![Leetcode 1331 array sequence number conversion [map] the leetcode path of heroding](/img/be/d429d0c437dc5ed7cb4448e223a83a.png)
Leetcode 1331 array sequence number conversion [map] the leetcode path of heroding

How does DataGrid export and recover the entire database data, using a single SQL file

12_ UE4 advanced_ Change a more beautiful character model

Whole process record of yolov3 target detection

MySQL流程控制之while、repeat、loop循环实例分析

机器学习【Numpy】

Detailed steps for installing MySQL 8.0 under Linux

July 28, 2022 Gu Yujia's study notes
随机推荐
Mathematical modeling -- analytic hierarchy process model
军品研制过程-转阶段
C language programming | exchange binary odd and even bits (macro Implementation)
Practical guidance for interface automation testing (Part I): what preparations should be made for interface automation
Ten thousand words detailed Google play online application standard package format AAB
STC单片机驱动1.8‘TFT SPI屏幕演示示例(含资料包)
Complexity analysis learning
接口自动化测试实践指导(上):接口自动化需要做哪些准备工作
基于单片机烟雾温湿度甲醛监测设计
1.5 nn. Module neural network (III)
MySQL流程控制之while、repeat、loop循环实例分析
1.4 nn. Module neural network (II)
Multiline text omission
Does domestic ERP have a chance to beat sap?
Tencent cloud logs in with PEM
Pp-yoloe details
腾讯云使用pem登录
Flask creation process day05-06 creation project
KNN method predicts pregnancy, KNN principle simple code
Suffix automata (SAM) board from Jly