switch语句

在说switch语句前,看一个不是很理想的if语句的示例
使用if else 语句打印一位数中文数字:

#include<iostream>
using namespace std;
//打印一位中文数字int main()
{int num = 6 ;if (num == 0){cout << "零" << endl;}else if (num == 1){cout << "一" << endl;}else if (num == 2){cout << "二" << endl;}else if (num == 3){cout << "三" << endl;}else if (num == 4){cout << "四" << endl;}else if (num == 5){cout << "五" << endl;}else if (num == 6){cout << "六" << endl;}else if (num == 7){cout << "七" << endl;}else if (num == 8){cout << "八" << endl;}else if (num == 9){cout << "九" << endl;}else {cout << "数字不在0-9范围内!" << endl;}return 0 ;
}

输出结果为:
例子使用多个else if打印中文数字,这样的写法有些烦恼,也容易出错。对于不同区间的判断,我们可以使用多个if…else语句来实现,但是对于类似枚举值的多个相等判断条件来说,c++提供了一种更合适的语法,也就是switch语句。
使用switch语句打印一位数中文数字:

#include<iostream>
using namespace std;
//使用switch语句打印一位数中文数字int main()
{int num = 6 ;switch (num){case 0:cout << "零" << endl;break;case 1:cout << "一" << endl;break;case 2: cout << "二" << endl;break;case 3:cout << "三" << endl;break;case 4: cout << "四" << endl;break;case 5:cout << "五" << endl;break;case 6: cout << "六" << endl;break;case 7: cout << "七" << endl;break;case 8: cout << "八" << endl;break;case 9:cout << "九" << endl;break;default :cout << "数字不在0-9之间!" << endl;break;}return 0 ;
}

运行结果为:
可以看出,两个程序的运行结果完全相同。
switch语句开头的括号中是一个表达式,而其下面的每个case都是这个表达式可能得到的值,每一个不同的值都会走近一段不同的代码。表达式的值如果没有出现在所有case后面,就会自动落到default(默认)的代码段中。

提示:case后面必须是常量整型(包括字符型和布尔型),如果不是常量整数,编译器编译的时候就无法确定分支的条件,那也就失去了使用switch语句优化的好处(编译器会对switch生成一种跳转表的优化结构)。如果case后面是常量的浮点型也没有什么意义,因为浮点数相等于一个特定值的概率是非常低的,不管他的范围有多小。

## #
需要注意的是,switch语句中的break也很关键,它会让程序跳出整个switch语句块。如果没有break,一个case的代码执行完后会继续执行紧接在case后的代码,这也叫贯穿(Fall-through)。

switch语句的贯穿

#include<iostream>
using namespace std;
//使用switch语句打印一位数中文数字int main()
{int num = 6 ;switch (num){case 0:cout << "零" << endl;break;case 1:cout << "一" << endl;break;case 2: cout << "二" << endl;break;case 3:cout << "三" << endl;break;case 4: cout << "四" << endl;break;case 5:cout << "五" << endl;break;case 6: cout << "六" << endl;case 7: cout << "七" << endl;break;case 8: cout << "八" << endl;break;case 9:cout << "九" << endl;break;default :cout << "数字不在0-9之间!" << endl;break;}return 0 ;
}

输出结果:

从输出结果可以看出,这种情况与期望不一致,代码行为与预期出现了偏差。

switch语句贯穿的合理应用:

#include<iostream>
using namespace std;//switch语句贯穿的合理应用int main()
{int num = 6 ;switch (num){case 0:case 2:case 4:case 6:case 8:cout << "num是偶数!" << endl;break;case 1:case 3:case 5:case 7:case 9:cout << "num是奇数!" << endl;break;default :cout << "数字不在0-9之间!" << endl;break;}return 0;
}

运行结果为:

示例展示了如何利用贯穿的特性使程序变得更灵活,从而实现对一个数奇偶的判断。

此外,default的添加也是值得注意的,因为如果没有把所有可能出现的case都处理好的话,程序可能会出现预期外的行为。

遗漏default:

#include<iostream>
using namespace std;//遗失defaultint main()
{int num = 11 ;switch (num){case 0:case 2:case 4:case 6:case 8:cout << "num是偶数!" << endl;break;case 1:case 3:case 5:case 7:case 9:cout << "num是奇数!" << endl;break;}return 0;
}

示例中遗失了default,这样导致了程序在num= 11,的时候,什么都不会打印,用户将感到十分的困惑。

如果本文对你有帮助请点赞支持一下下~

c++ switch语句相关推荐

  1. Go 学习笔记(62)— Go 中 switch 语句中的 switch 表达式和 case 表达式之间的关系

    switch 语句对 switch 表达式的结果类型,以及各个 case 表达式中子表达式的结果类型都是有要求的. 毕竟,在 Go 语言中,只有类型相同的值之间才有可能被允许进行判等操作. 1. sw ...

  2. C#中switch语句注意

    大家肯定对switch语句并不陌生,它能够让程序根据控制表达式的值,从多个动作中作出选择(从逻辑过程看,和多分支语句if-else有些相似).在C++和java中也有这一语句,不过在C#中,这一语句则 ...

  3. c语言switch不允许实型,C语言中switch语句什么意思

    Switch在C语言中是保留字,其作用是进行判断选择.switch(开关语句)常和case break default一起使用. Switch用在编程中,如C语言中它经常跟Case一起使用,是一个判断 ...

  4. switch的case使用数组C语言,使用常量数组的元素作为switch语句中的case

    我正在尝试将一组按键映射到一组命令.因为我处理来自多个地方的命令,所以我想在键和命令之间设置一个抽象层,这样如果我更改底层键映射,我就不必更改很多代码.我目前的尝试看起来像这样: // input.h ...

  5. switch语句中在case块里声明变量会遇到提示“Expected expression before...的问题

    switch语句中在case块里声明变量会遇到提示"Expected expression before..."的问题 例如在如下代码中 1 case constant: 2 in ...

  6. JavaScript Switch 语句

    avaScript Switch 语句 如果希望选择执行若干代码块中的一个,你可以使用 switch 语句: 语法: switch(n){case 1:执行代码块 1breakcase 2:执行代码块 ...

  7. 我去,你写的 switch 语句也太老土了吧

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 昨天早上通过远程的方式 review 了两名新来同事的代码,大部分 ...

  8. 你真的懂switch吗?聊聊switch语句中的块级作用域

      最近在代码中不小心不规范的,在switch里面定义了块级变量,导致页面在某些浏览器中出错,本文讨论以下switch语句中的块级作用域. switch语句中的块级作用域 switch语句中的块级作用 ...

  9. c#switch语句判断成绩_Go的条件判断语句

    现实时间中,我们如果想去购物,可以选择网上或者线下去购物,甚至说,要购买的物品都有许多选择,选价格便宜的,选质量好的,选不用运费等等 那么在计算机语言中,我们要怎么实现现实中,这些选择呢? Go语言支 ...

  10. R语言switch语句语法、实战:Switch语句用来处理嵌套的if else处理起来比较困难或者麻烦的条件判断问题

    R语言switch语句语法.实战:Switch语句用来处理嵌套的if else处理起来比较困难或者麻烦的条件判断问题 目录

最新文章

  1. 『计算机视觉』经典RCNN_其一:从RCNN到Faster-RCNN
  2. 为什么我们要做三份 Webpack 配置文件
  3. Apache ZooKeeper - Watch 机制的底层原理
  4. oracle 48小时内_缺血性脑梗死后48小时内使用阿替普酶能够降低脑损伤程度
  5. pytorch创建datset
  6. Android_自适应布局
  7. oracle 选择函数,Oracle 分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法
  8. 微信小程序下拉刷新真机没效果_微信小程序~下拉刷新真机测试不弹回的处理办法...
  9. 视频搬运伪原创 视频修改MD5值
  10. Hilbert变换C语言实现学习
  11. 全面:Realtek/瑞昱无线产品图谱及市场构成
  12. [区块链]对话区块链人工智能顶级实力公司ObEN
  13. echarts饼状图去除他的划过放大效果。
  14. 全国城市空气质量实时发布平台数据抓取采集获取
  15. fluent-mybatis初体验
  16. 博升机器人_乐博乐博机器人
  17. 数据分析业务逻辑思维2020-08-24
  18. Linux系统日志rsyslogd
  19. Cocos2d-x3.8.1制作愤怒的小鸟
  20. 对拼多多优惠券事件的思考,理解流程为何如此重要

热门文章

  1. 在Redmond见到我的偶像Anders
  2. 蚂蚁金服:AlipayHK上线跨境线下支付新功能
  3. 数据结构 查找 静态查找表算法 折半查找 二叉排序树查找算法 实验报告
  4. python的树蕨类型(是数据嘿嘿嘿,打错发现挺好玩的)
  5. README-architect
  6. Prometheus实战--Uber背书的存储解决方案M3
  7. 推荐 2 个阅读神器,发 20000 个微信红包封面
  8. Java训练work3.Exer3---去重与排序
  9. python多线程下载视频_python 实现多线程下载m3u8格式视频并使用fmmpeg合并
  10. 一文详解计算机网络经典面试题