c++语言“case”,C++ switch case详解
当程序的一部分导致另一部分执行时,会发生分支。if-else if 语句允许程序分支到几个可能的路径之一,当这些测试之一成立时,它执行一系列测试(通常是关系)和分支。
switch 语句是一个类似的机制,但是它测试的是整数表达式的值,然后使用该值来确定要分支到哪一组语句,以下是 switch 语句的格式:
switch (IntegerExpression)
{
case ConstantExpression:
//在这里放置一个或多个语句
case ConstantExpression:
//在这里放置一个或多个语句
//case可被重复多次
default:
//在这里放置一个或多个语句
}
此类语句的第一行以单词 switch 开始,后面是括号内的整数表达式 Integer Expression。 这可以是以下两种之一:
任何一个整型数据类型的变量(包括 char)。
其值为任何整型数据类型的表达式。
在下一行是包含几个 case 语句的块的开头,每个 case 语句格式如下:
case ConstantExpression:
//在这里放置一个或多个语句
在单词 case 之后是一个常量表达式 Constant Expression,它必须是整数类型,如 int 或 char,后面跟一个冒号。常量表达式可以是整型常数或整型命名常量。该表达式不能是一个变量(如 n==25),也不能是布尔表达式(如 x<22)。case 语句标记一段分支语句的开头,如果 switch 表达式的值与 case 达式的值匹配,则进入该分支。
请注意,与大多数语句块不同,这组语句不需要大括号,且块中每个 case 语句的表达式必须是唯一的。
在所有 case 语句后面的是可选的 default 部分。如果没有一个 case 表达式与 switch 表达式匹配,则进入该分支。因此,它的作用就像 if-else if 语句中的结尾 else。
下面的程序显示了一个简单的 switch 语句的工作原理:
#include
using namespace std;
int main()
{
char choice;
cout << "Enter A,B,or C: ";
cin >> choice;
switch (choice)
{
case 'A' :
cout<< "You entered A. \n";
break;
case 'B' :
cout << "You entered B. \n";
break;
case 'C' :
cout << "You entered C.\n";
break;
default:
cout << "You did not enter A,or C!\n";
}
return 0;
}
程序输出结果:
Enter A,or C: B
You entered B.
第一个 case 是 “case 'A':”,第二个 case 是 “case 'B':”,第三个case是 “case 'C':”。如果变量 choice 包含值'A'、'B'或'C',则这些语句标记程序要分支的位置(请记住,字符变量和常数被视为整数)。如果用户输入除 A、B 或 C 以外的任何内容,则进入 default 默认分支。
注意,在“case 'A'”、“case 'B'”和“case 'C'”部分的末尾都有 break 语句。break 语句可以导致程序退出 switch 语句。在遇到 break 语句后,执行的下一条语句将是终止整个 switch 语句的封闭大括号后面的任何语句。
例如,在前面程序中,遇到 break 之后执行的就是第 22 行大括号之后的语句。每当要“断开”一个 switch 语句时,就需要一个 break 语句,它不会像 if-else if 语句那样选择执行一组语句之后就自动退出。
case 语句显示程序在块中开始执行的位置,break 语句则显示程序停止的位置。如果没有 break 语句,则程序将执行从匹配的 case 语句到块结尾的所有行。
注意,default 部分(如果没有 default 则是最后一个 case 部分)不需要 break 语句。当然有些程序员有强迫症,喜欢也放一个以保持一致。
下面程序是上面程序的修改版,它演示了如果忽略 break 语句会发生什么。
#include
using namespace std;
int main()
{
char choice;
cout << "Enter A,or C: ";
cin >> choice;
switch (choice)
{
case 'A' :
cout<< "You entered A. \n";
case 'B' :
cout << "You entered B. \n";
case 'C' :
cout << "You entered C.\n";
default:
cout << "You did not enter A,or C!\n";
}
return 0;
}
程序运行结果:
Enter A,or C: A
You entered A.
You entered B.
You entered C.
You did not enter A,or C!
在没有 break 语句之后,此程序“渎职”放行了匹配 case 表达式下面的所有语句,使它们都被执行了,但有时这样的效果也正是程序员想要的,如下面所示:
#include
using namespace std;
int main()
{
char FeedGrade;
//Get the desired grade of Feed
cout << "Our dog food is availablein three grades:\n";
cout << "A,and C. Which do you want pricing for? ";
cin >> FeedGrade;
// Find and display the price
switch(FeedGrade)
{
case 'a':
case 'A':
cout << "30 cents per pound.\n";
break;
case 'b':
case 'B':
cout << "30 cents per pound.\n";
break;
case 'c':
case 'C':
cout << "15 cents per pound.\n";
break;
default :
cout << "That is an invalid choice.\n";
}
return 0;
}
程序输出结果:
Our dog food is available in three grades:
A,and C. Which do you want pricing for? b
20 cents per pound.
当用户输入 a 时,相应的 case 并没有与之相关联的语句,也没有 break,所以程序被放行而不是跳出,进入下一个 case,对应 A 分支。同样的技术也应用于 b 和 C。
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
c++语言“case”,C++ switch case详解相关推荐
- C语言/C++【switch语句详解(用法、规则、流程图、实例)】
C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 1.switch语句[C语言] 1.2.C语言中 switch语句的语法 1.3.switch语句遵循规则 1.3.switch ...
- 【C语言】扫雷小游戏详解
[C语言]扫雷小游戏详解 前言: 还记得大明湖畔的夏雨荷,电脑课上的扫雷吗? ---------------------------是 他 吗--------------------------- 没 ...
- 大二c语言期末考试题库及详解答案,大学C语言期末考试练习题(带详解答案)...
<大学C语言期末考试练习题(带详解答案)>由会员分享,可在线阅读,更多相关<大学C语言期末考试练习题(带详解答案)(55页珍藏版)>请在金锄头文库上搜索. 1.一. 单项选择题 ...
- Go 语言 bytes.Buffer 源码详解之1
转载地址:Go 语言 bytes.Buffer 源码详解之1 - lifelmy的博客 前言 前面一篇文章 Go语言 strings.Reader 源码详解,我们对 strings 包中的 Reade ...
- c语言while将字符循环,C语言 while语句的用法详解
在C语言中,共有三大常用的程序结构: 顺序结构:代码从前往后执行,没有任何"拐弯抹角": 选择结构:也叫分支结构,重点要掌握 if else.switch 以及条件运算符: 循环结 ...
- R语言可视化绘图基础知识详解
R语言可视化绘图基础知识详解 图形参数:字体.坐标.颜色.标签等: 图像符号和线条: 文本属性: 图像尺寸及边界: 坐标轴.图例自定义等: 图像的组合: #install.packages(c(&qu ...
- php函数find的用法,c语言find函数的用法详解
c语言find函数的用法详解 C语言之find()函数 find函数用于查找数组中的某一个指定元素的位置. 比如:有一个数组[0, 0, 5, 4, 4]: 问:元素5的在什么位置,find函数 返回 ...
- SVN switch 用法详解 (ZZ)
SVN switch 用法详解 (ZZ) http://www.cnblogs.com/dabaopku/archive/2011/05/21/2052820.html 确实,以前不会用switch ...
- java语言链栈_Java语言实现数据结构栈代码详解
近来复习数据结构,自己动手实现了栈.栈是一种限制插入和删除只能在一个位置上的表.最基本的操作是进栈和出栈,因此,又被叫作"先进后出"表. 首先了解下栈的概念: 栈是限定仅在表头进行 ...
- c语言线性表库函数大全,数据结构(C语言版)-线性表习题详解
<数据结构(C语言版)-线性表习题详解>由会员分享,可在线阅读,更多相关<数据结构(C语言版)-线性表习题详解(23页珍藏版)>请在人人文库网上搜索. 1.数 据 结 构 ,线 ...
最新文章
- 天哪,路由器都能跑Docker了!
- mysql是如何管理数据结构_MySQL索引背后的数据结构和原理
- edge浏览器 开启java,启动Edge浏览器,然后等待其关闭[重复]
- 反编译得到的java文件好多错误 val$query什么意思_这部分代码有错么?一直提示输入框$(#msg).val()得到的值未定义...
- 2014-06-27nbsp;20:47
- 了解mysql文章_一篇文章带你深入了解MySQL 索引相关
- 光环大数据spark文档_推荐大数据Spark必读书目
- 《Android开发从零开始》——10. LinearLayout学习
- 2018值得一看的GAN论文回顾
- 我的Android进阶之旅------Android检测wifi连接状态
- .net @什么意思_.NET和F#周报2019-4 各地微软技术俱乐部汇总 ML.NET 0.10
- 异常检测时间序列_DeepAnT —时间序列的无监督异常检测
- Photoshop栅格化图层到底什么意思,什么时候该用栅格化涂层
- rm -rf /* 数据恢复记录
- c语言 楼盘查询系统,专业楼盘部模型
- python制作qq登录界面_Python制作一个仿QQ办公版的图形登录界面
- Spring IOC与DI、反射的理解 含小案例说明
- 烦人的警告 libpng warning: iCCP: known incorrect sRGB profile
- Ignite Beijing 2019你参加了吗?多图,慎点!
- 负对数似然 交叉熵 mse mae的区别