C语言虽然没有限制 if else 能够处理的分支数量,但当分支过多时,用 if else 处理会不太方便,而且容易出现 if else 配对出错的情况。例如,输入一个整数,输出该整数对应的星期几的英文表示:

#include

int main(){

int a;

printf("Input integer number:");

scanf("%d",&a);

if(a==1){

printf("Monday\n");

}else if(a==2){

printf("Tuesday\n");

}else if(a==3){

printf("Wednesday\n");

}else if(a==4){

printf("Thursday\n");

}else if(a==5){

printf("Friday\n");

}else if(a==6){

printf("Saturday\n");

}else if(a==7){

printf("Sunday\n");

}else{

printf("error\n");

}

return 0;

}

运行结果:

Input integer number:3↙

Wednesday

对于这种情况,实际开发中一般使用 switch 语句代替,请看下面的代码:

#include

int main(){

int a;

printf("Input integer number:");

scanf("%d",&a);

switch(a){

case 1: printf("Monday\n"); break;

case 2: printf("Tuesday\n"); break;

case 3: printf("Wednesday\n"); break;

case 4: printf("Thursday\n"); break;

case 5: printf("Friday\n"); break;

case 6: printf("Saturday\n"); break;

case 7: printf("Sunday\n"); break;

default:printf("error\n"); break;

}

return 0;

}

运行结果:

Input integer number:4↙

Thursday

switch 是另外一种选择结构的语句,用来代替简单的、拥有多个分枝的 if else 语句,基本格式如下:

switch(表达式){

case 整型数值1: 语句 1;

case 整型数值2: 语句 2;

......

case 整型数值n: 语句 n;

default: 语句 n+1;

}

它的执行过程是:

1) 首先计算“表达式”的值,假设为 m。

2) 从第一个 case 开始,比较“整型数值1”和 m,如果它们相等,就执行冒号后面的所有语句,也就是从“语句1”一直执行到“语句n+1”,而不管后面的 case 是否匹配成功。

3) 如果“整型数值1”和 m 不相等,就跳过冒号后面的“语句1”,继续比较第二个 case、第三个 case……一旦发现和某个整型数值相等了,就会执行后面所有的语句。假设 m 和“整型数值5”相等,那么就会从“语句5”一直执行到“语句n+1”。

4) 如果直到最后一个“整型数值n”都没有找到相等的值,那么就执行 default 后的“语句 n+1”。

需要重点强调的是,当和某个整型数值匹配成功后,会执行该分支以及后面所有分支的语句。例如:

#include

int main(){

int a;

printf("Input integer number:");

scanf("%d",&a);

switch(a){

case 1: printf("Monday\n");

case 2: printf("Tuesday\n");

case 3: printf("Wednesday\n");

case 4: printf("Thursday\n");

case 5: printf("Friday\n");

case 6: printf("Saturday\n");

case 7: printf("Sunday\n");

default:printf("error\n");

}

return 0;

}

运行结果:

Input integer number:4↙

Thursday

Friday

Saturday

Sunday

error

输入4,发现和第四个分支匹配成功,于是就执行第四个分支以及后面的所有分支。这显然不是我们想要的结果,我们希望只执行第四个分支,而跳过后面的其他分支。为了达到这个目标,必须要在每个分支最后添加break;语句。

break 是C语言中的一个关键字,专门用于跳出 switch 语句。所谓“跳出”,是指一旦遇到 break,就不再执行 switch 中的任何语句,包括当前分支中的语句和其他分支中的语句;也就是说,整个 switch 执行结束了,接着会执行整个 switch 后面的代码。

使用 break 修改上面的代码:

#include

int main(){

int a;

printf("Input integer number:");

scanf("%d",&a);

switch(a){

case 1: printf("Monday\n"); break;

case 2: printf("Tuesday\n"); break;

case 3: printf("Wednesday\n"); break;

case 4: printf("Thursday\n"); break;

case 5: printf("Friday\n"); break;

case 6: printf("Saturday\n"); break;

case 7: printf("Sunday\n"); break;

default:printf("error\n"); break;

}

return 0;

}

运行结果:

Input integer number:4↙

Thursday

由于 default 是最后一个分支,匹配后不会再执行其他分支,所以也可以不添加break;语句。

最后需要说明的两点是:

1) case 后面必须是一个整数,或者是结果为整数的表达式,但不能包含任何变量。请看下面的例子:

case 10: printf("..."); break; //正确

case 8+9: printf("..."); break; //正确

case 'A': printf("..."); break; //正确,字符和整数可以相互转换

case 'A'+19: printf("..."); break; //正确,字符和整数可以相互转换

case 9.5: printf("..."); break; //错误,不能为小数

case a: printf("..."); break; //错误,不能包含变量

case a+10: printf("..."); break; //错误,不能包含变量

2) default 不是必须的。当没有 default 时,如果所有 case 都匹配失败,那么就什么都不执行。

c语言switch case语句范围,C语言switch case语句详解相关推荐

  1. 编程题50 习题6-8 单词首字母大写【浙大版《C语言程序设计(第4版)》题目集 详解教程】

    编程题50 习题6-8 单词首字母大写[浙大版<C语言程序设计(第4版)>题目集 详解教程] 原题链接:习题6-8 单词首字母大写 (pintia.cn) 参考答案 #include< ...

  2. C语言中定义常量的关键字是什么,C++_详解C语言中const关键字的用法,关键字const用来定义常量,如 - phpStudy...

    详解C语言中const关键字的用法 关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const ...

  3. 数据结构(C语言版) 第 八 章 排序 知识梳理 + 习题详解

    目录 一.归并排序 二.交换排序 1.快速排序 2.冒泡排序 三.插入排序 1.直接插入排序(基于顺序查找) 2.折半插入排序(基于折半查找) 3.希尔排序(基于逐趟缩小增量) 四.选择排序 0.直接 ...

  4. 数据结构(C语言版) 第 六 章 图 知识梳理 + 习题详解

    目录 一. 图的基本定义和术语 一.图的基本概念 1.度 2.连通 (1)连通图 (2)强连通/强连通图 3.回路 4.完全图 二.图的三种存储结构 1.邻接矩阵表示法 2.邻接表(链式)表示法 3. ...

  5. linux 文件 字符集设置,Linux字符集和系统语言设置-LANG,locale,LC_ALL,POSIX等命令及参数详解...

    博文说明[前言]: 本文将通过个人口吻介绍Linux字符集和系统语言设置,包括LANG,locale,LC_ALL,POSIX等命令及参数详解的相关知识,在目前时间点[2017年6月21号]下,所掌握 ...

  6. c语言path环境变量,Windows下PATH等环境变量详解(转载)

    在学习JAVA的过程中,涉及到多个环境变量(environment variable)的概念,如PATH.正确地配置这些环境变量,是能够顺利学习.开发的前提.而经常出现的问题是:有的学习者能够按照提示 ...

  7. c语言 定时器作用,单片机定时器的作用及使用方法详解

    单片机定时器的作用及使用方法详解 单片机定时器在单片机的功能是很重要的,它一般被用作定时功能,来做定时检测.定时响应和定时控制,并且可以产生毫秒宽的脉冲信号来驱动步进电机.计时和计数的最终功能是通过计 ...

  8. c语言排序常用问题,【更新中】【排序详解】解决排序问题(以C语言为例)

    [更新中][排序详解]解决排序问题(以C语言为例) [更新中][排序详解]解决排序问题(以C语言为例) 文章目录 排序的相关概念 简单排序 一.插入排序: (一)插入排序基本思想 (二)插入排序基本操 ...

  9. sort在c语言中的作用,c语言中sort的用法详解.docx

    c语言中sort的用法详解.docx C语言中SORT的用法详解C语言的学习很多是比较复杂的,那么C语言中SORT的用法的用法你知道吗下面学习啦小编就跟你们详细介绍下C语言中SORT的用法的用法,希望 ...

  10. c语言字符串正序反序连接输出,C语言中字符串实现正序与逆序实例详解

    C语言中字符串实现逆序实例详解 字符串逆序和正序的实现代码: #include #include #include #include #include /*定义*/ typedef struct no ...

最新文章

  1. 创建操作/删除多行数据的UITableView的细节
  2. 马斯克员工参与新冠研究,论文登上Nature子刊
  3. One-hot encoding的不足及改进
  4. 【JavaScript吉光片羽】遭遇IE8
  5. gcc的安装----rpm包安装顺序
  6. Oracle Length 和 Lengthb 函数说明 .(用来判断记录值里是否有中文内容)
  7. java中Date类、DateFormat及SimpleDateFormat简介
  8. 老司机普及的c++入门心得!
  9. 人在囧途!12306买到相同高铁票 回应:可能是机器故障
  10. Git学习总结(5)——搭建Git简易高效服务器
  11. 制造业Google Glass 焕发巨大活力
  12. Graphviz 绘制流程图
  13. 保存单文件为mhtml
  14. 图论的应用 计算机,图论的应用计算机技术与科学毕业论文.doc
  15. 关于需求确认的重要性
  16. USB转多串口设备固定串口号
  17. 青岛大学的计算机专业考研分数线,青岛大学考研分数线
  18. 一个过不了情关的男人!!
  19. android mac地址不可用,Android手机里的mac地址显示不可用是为什么。我的手机是海信E920....
  20. windows和linux的路径分隔符问题

热门文章

  1. c语言合并排序算法_合并排序算法
  2. C++贪心——陶陶摘苹果(升级版)
  3. 做一个有魅力的男人(之前30年的少年期该过了吧)
  4. 数据库系统教程(第3版) 施伯乐等著
  5. PAT1026 程序运行时间 (15 分)(C语言)
  6. 2019AI人工智能新风向:全球智慧城市2.0报告,中国占了世界一半
  7. ubuntu 系统日志信息
  8. java 动态数据展示地图_Echarts实现地图下钻+地图数据展示
  9. 逻辑回归模型小结--基于评分模型
  10. 逻辑回归模型笔记整理6 - 参数详细说明