栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

深入C语言(4)——switch的定义与使用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

深入C语言(4)——switch的定义与使用

深入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来确定语句列表的进入点。

执行过程如下:

  1. 计算完成expression的内容。
  2. 执行流转到语句列表中其case标签值与expression值匹配的语句。
  3. 从上一条语句执行开始,一直到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。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029858.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号