• 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
  • 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
  • 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。也就是不再执行switch语句。
  • 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
  • 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 中的 break 语句不是必需的。default case语句的作用就是判断除了上述的case情况之外的其他情况。
    #include<stdio.h>int main()
    {int data;printf("请输入一个数:");scanf("%d",&data);switch(data){case 1:puts("满足条件1的情况");    break;case 2:puts("满足条件2的情况");    break;case 3:puts("满足条件3的情况");    break;default:puts("其他情况");}return 0;
    }

    该代码中需要注意的有:

  • 1:switch()括号里面必须写有变量

  • 2:case 1:case后面加所属情况注意用空格隔开,之后加冒号

  • 3:default后面加冒号:

#include<stdio.h>int main()
{int data;printf("请输入一个数:");scanf("%d",&data);switch(data){case 1:puts("满足条件1的情况");    case 2:puts("满足条件2的情况");    break;case 3:puts("满足条件3的情况");    break;default:puts("其他情况");}return 0;
}

该代码情况一之间并没有使用break,所以当输入的数字是1的时候,代码运行的结果是

满足条件1的情况
满足条件2的情况

所以为了实现这种情况,改进后的代码是:

switch(data){case 1:case 2:puts("满足条件1和2的情况");    break;

这样无论是输入1还是2,代码运行的结果都是:

满足条件1和2的情况

上述情况均是变量data为整型数据的时候,那么data的类型能不能是字符型呢

看代码:

#include<stdio.h>int main()
{char cdata;printf("请输入一个字符:");scanf("%c",&cdata);switch(cdata){case 'a':puts("满足条件a的情况");    case 'b':puts("满足条件b的情况");    break;case 'c':puts("满足条件c的情况");    break;default:puts("其他情况");}return 0;
}

在上述代码中,不同于整型变量的是,变量的类型变成了字符型,与之相关联的case后面的所属情况也要相应的变成字符,但是虽然表面看起来是用字符表示所属情况,但是最终编译器使用的是ascii码值来进行相应的操作。所以本质上还是和整型数据是一样的。

同样: 情况a的后面要是去掉break的话,输入a或者b,代码运行的结果是:

满足条件a和条件b的情况

将整型变量和字符变量结合在一起会是什么样子呢:

看代码:

#include<stdio.h>int main()
{char cdata;int  data;  printf("请输入一个字符:");scanf("%c",&cdata);switch(cdata){case 'a':puts("满足条件a的情况");    break;case 'b':puts("满足条件b的情况");    break;default:puts("其他情况");}printf("请输入一个数:");scanf("%d",&data);switch(data){case 1:puts("满足条件1的情况");    break;case 2:puts("满足条件2的情况");    break;default:puts("其他情况");}return 0;}

此时,代码运行的结果是:

请输入一个字符:a
满足条件a的情况
请输入一个数:1
满足条件1的情况

但是如果将整型和字符型的代码顺序调换一下,却出现了问题:

代码如下:

#include<stdio.h>int main()
{char cdata;int  data;  printf("请输入一个数:");scanf("%d",&data);switch(data){case 1:puts("满足条件1的情况");    break;case 2:puts("满足条件2的情况");    break;default:puts("其他情况");} printf("请输入一个字符:");scanf("%c",&cdata);switch(cdata){case 'a':puts("满足条件a的情况");    break;case 'b':puts("满足条件b的情况");    break;default:puts("其他情况");}return 0;}

但提醒输入数字的时候,整型数据的判断是正确的,但是到了下面的字符型时却是直接跳过:

结果如下:

请输入一个数:1
满足条件1的情况
请输入一个字符:其他情况

字符的判断直接显示其他情况。

出现上述情况的原因是:整型数据在提醒输入的时候,scanf之后的回车没有被接收,导致到了字符型的时候,回车被当作一个字符接收,转换成ascii码后与所存情况进行判断,最后得出其他情况的结果。解决方法就是键入getchar()吸收掉回车键。

即:

printf("请输入一个字符:");getchar();scanf("%c",&cdata);

这样一改之后运行结果就正常了。

但是为什么调换顺序之前不用getchar也能正常运行呢!!!

switch case判断相关推荐

  1. switch case 判断是否为按钮、设置属性 Load Foreach 绑定事件

    private void button9_Click(object sender, EventArgs e){foreach (Control CT in this.Controls) {//判断是否 ...

  2. php switch case 判断语句,PHP的switch判断语句的“高级”用法详解,switch详解_PHP教程...

    PHP的switch判断语句的"高级"用法详解,switch详解 只所以称为"高级"用法,是因为我连switch的最基础的用法都还没有掌握,so,接下来讲的其实 ...

  3. java switch case多个条件_JAVA基础程序设计之判断与循环

    1 基本概念 一般来说程序的结构包含三种情况: 顺序结构:至上而下逐行执行,一条语句执行完之后继续执行下一条,直到程序结束.选择结构:根据条件的成立与否,再决定执行哪些语句,例如 if-else- 语 ...

  4. Go语言-switch case | switch中判断多个值、interface conversion: interface {} is float64, not int

    文章目录 Go语言-switch case 背景 switch case Golang中switch的特殊用法--fallthrough go语言switch中判断多个值 Type Switch,判断 ...

  5. C++用unordered_map查表代替if else/switch case多判断语句

    一.引言 在C++中我们写判断逻辑一般会用if else或switch case语句,比如以下例子: #include <iostream>using namespace std;clas ...

  6. kettle中的switch_kettle 条件判断 Switch Case

    kettle 条件判断 Switch Case kettle 条件判断 Switch Case 介绍 Switch / Case,顾名思义,类似 Java 中的 Switch / Case,用于进行条 ...

  7. 比Switch...Case更加优雅的多条件判断写法

    前言 前几天,本人负责编写网站上线的环境判断功能,其中涉及到大量多条件判断的code.对于多条件判断写法,大部分程序员都是采用if...else if...else或者switch...case的写法 ...

  8. java switch case 或_Java Switch Case 条件判断

    Java的 Switch Case 语句,可以理解为分支 例子 假设打麻将有四个人 编号为 1 2 3 4 对应名字为 张三,李四,王五,赵六 数据结构 switch(expression){ cas ...

  9. if else switch case 如何高端优雅又不失礼貌的的写判断

    日常项目开发我们必然且高频会遇到判断场景 比如: 一个管理系统,根据用户特征每人发放福利 1,瘸子 === 送 === 轮椅 2,瞎子 === 送 === 墨镜 3,聋子 === 送 === 耳机(程 ...

最新文章

  1. 设计模式 之美 -- 策略模式
  2. centos 网卡聚合及Cisco交换机链路聚合
  3. winrar远程代码执行漏洞复现(cve-2018-20250)
  4. 震惊!html文件注释也会影响运行代码!(werkzeug.routing.BuildError: Could not build url for endpoint)莫名其妙
  5. 为了找到你,CTO 和你唠唠研发都做啥?
  6. JFreeChart相关类中文说明
  7. oracle 数据库中执行数据库语句能找到数据,但是程序中却抓取不到
  8. protected访问权限_权限修饰符 /重写
  9. java json html模板,基于jQuery的AJAX和JSON实现纯html数据模板(转载)
  10. can总线学习(二)
  11. 中兴新支点国产操作系统下载安装WPS办公软件,好用无广告
  12. 为什么计算机要学电路与电子技术,电路与电子技术基础(计算机科学与技术面向新工科专业建设计算机系列教材)...
  13. 朴素贝叶斯和情感分类
  14. 初次软件开发(总结篇 之二)_-Chaz-_新浪博客
  15. Excel-资产负债表-模板
  16. 7z001怎么解压在安卓手机上面_安卓手机时间怎么显示在中间 时间居中设置教程...
  17. 绝地求生服务器维护需要多久,绝地求生8月4日更新到几点?绝地求生维护一次需要多长时间?...
  18. 在线考试系统的倒计时
  19. 使用线程实现电子时钟
  20. Flutter: 弹性布局Flex(Expanded)、流式布局Wrap、Flow

热门文章

  1. Mongodb数据库中修改器$push和$addToSet的相同点和不同点
  2. 使用GPU Instancing屏幕花屏问题
  3. win7 网络打印机 未授予用户在此计算机上的请求登录类型,Win7共享打印机登录失败:未授予用户在此计算机上的请求登陆类型 解决方法...
  4. 用计算机绘制函数图象教案,信息技术应用 用计算机画函数图象优秀教案
  5. 磁盘数据恢复怎么做?实用方法快收藏!
  6. 教麦叔了解J-Link、ST-Link、ULink、JTAG、SWD、SWIM的区别
  7. 完全搞定iframe(框架)里的滚动条!(一)
  8. java中表格不显示表头_表格(隐藏表头)
  9. 人力资源管理专业知识与实务(初级)【3】
  10. 互动媒体技术课程作业 十二个“一”的人格感受