switch格式:

switch (条件表达式)
{
case 整数: // case可以有一个或多个
语句;
break;
case 整数:
语句;
break;
default:
语句;
break;
}

执行说明:

  1.拿到条件表达式的返回值(注意返回值必须是整型)

  2.利用条件表达式的返回值和switch后面大括号中的每一个case进行比较, 判断条件表达式的返回值和case后面的整数是否相等   条件表达式 == 整数

  3.如果条件表达式的返回值等于某一个case后面的整数, 那么就会执行该case后面的语句

  4.执行完语句之后如果遇到break就会结束整个switch语句, 也就是说后面的所有语句都不会被执行

  5.如果前面的case不满足, 也就是前面的case的整数和条件表达式的返回值不相等就会继续判断后面的case

  6.如果前面所有的case都不满足, 就会执行default后面的语句

使用举例:

要求用户输入一个分数,根据输入的分数输出对应的等级

A 90~100

B 80~89

C 70~79

D 60~69

E 0~59

     // 1.提示用户输入一个分数
printf("请输入一个0~100的分数, 以回车结束\n"); // 2.定义变量保持用户输入的分数
int score = -; // 3.接收用户输入的值
scanf("%i", &score); //可以对用户输入的数据进行刷选 如 分数小于 0 或 大于 100 怎么怎么样 // 4.根据用户输入的值输出对应的结果
switch (score/) {
case :
printf("A\n");
break;
case :
printf("A\n");
break;
case :
printf("B\n");
break;
case :
printf("C\n");
break;
case :
printf("D\n");
default:
printf("E\n");
break;
}

注意点:

  1.Switch得条件表达式注意点

    Switch的条件表达式必须是返回整数的表达式, 也就是说()中只能放整数

    或者写能够转换为整数的类型也可以, 例如char, 因为char类型可以转换为int类型, 所以写char也可以

    switch ('A') {
case :
printf("");
break;
case :
printf("");
break;
default:
printf("other");
break;
}

  2.case的取值

    Switch中, case后面只能放返回值是整数的表达式或者整数, 或者能够转换为整数的类型

    case的取值不能重复

    case后面不能放变量, 因为系统在编译的时候会对Switch后面所有的case进行优化, 会根据case后面的常量值, 生成一张取值表

    int number = ;
switch () {
case + :
printf("");
break;
case 'A':
printf("");
break;
case : // 异常信息 Duplicate case value '65'
printf("");
break;
case number:// 异常信息 Expression is not an integer constant expression
printf("");
break;
default:
printf("other");
break;
}

  3.default的位置问题

    Switch中的default可以随便放

    无聊default写到什么地方, 它都会最后执行(只有前面所有的case都不满足的情况才会执行)

    只要某一个case满足, 那么后面所有的case和default都会失效  case语句的穿透问题

    同理: 只要default满足, 那么所有的case都会失效

/*
结束switch语句:
1.遇到break
2.执行到switch对应的大括号的结束 }
*/
switch () {
default:
printf("other\n");
break;
case :
printf("");
break;
case :
printf("");
break;
case :
printf("");
// 没有写break 如果switch中有一个case满足了条件, 那么其它所有的case和default都会失效\
即相当于case default都不存在了 程序一直往下执行 直到遇到break或switch结束大括号}才跳出
case :
printf("");
break;
}

省略break示例:

// 从键盘输入一个月份,输出对应季节 12~2 冬季 3~5 春季 6~ 8 夏季 9~11 秋季
printf("请输入一个1~12的月份, 以回车结束\n");
int number = -;
scanf("%i", &number);
switch (number) {
case :
case :
case :
printf("冬季");
break;
case :
case :
case :
printf("春季");
break;
case :
case :
case :
printf("夏季");
break;
case :
case :
case :
printf("秋季");
break;
default:
printf("让我凌乱会儿\n");
break;
}

C语言基础--switch的更多相关文章

  1. C语言基础回顾

    第一章 C语言基础 1.  C语言编译过程 预处理:宏替换.条件编译.头文件包含.特殊符号 编译.优化:翻译并优化成等价的中间代码表示或汇编代码 汇编:生成目标文件,及与源程序等效的目标的机器语言代码 ...

  2. Java学习总结(二)----Java语言基础

    1.     Java语言基础 2.1 关键字 定义:被java语言赋予特殊含义的单词 特点:关键字中的字母都为小写 用于定义数据类型的关键字 class,interface,byte,short,i ...

  3. JavaScript基础---语言基础(1)

    写在前面: 通过四篇博客把JS基础中的基础整理一下,方便自己查阅,这些内容对于实际项目开发中也许并不会在意,但是作为JS的语言基础,自觉还是应该熟悉.在完成这三篇博客(JavaScript基础---语 ...

  4. Java之--Java语言基础组成(关键字、标识符、注释、常量和变量、运算符)

    Java语言基础组成-关键字.标识符.注释.常量和变量.运算符 Java语言由8个模块构成,分别为:1.关键字:2.标识符(包名.类名.接口名.常量名.变量名等):3.注释:4.常量和变量:5.运算符 ...

  5. 【quick-cocos2d-x】Lua 语言基础

    版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速 ...

  6. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  7. C语言基础(转载自大海笔记)

    # C语言基础2015年03月26日10:04:411.    语言排行榜C——java——objective-C2.    进制:进制:进位机制.用普通的话讲,应该为人为的定义一种度量来标识一样东西 ...

  8. 01_C语言基础

    内容提要: 1. C语言概述2. 数据类型.运算符与表达式3. C语言程序结构 4. VC6.0使用练习 知识详解01:C语言的历史 1. C语言与其它语言比较 汇编语言: (1).可直接对硬件进行操 ...

  9. (cljs/run-at (->JSVM :browser) "语言基础")

    前言  两年多前知道cljs的存在时十分兴奋,但因为工作中根本用不上,国内也没有专门的职位于是搁置了对其的探索.而近一两年来又刮起了函数式编程的风潮,恰逢有幸主理新项目的前端架构,于是引入Ramda. ...

随机推荐

  1. junit4 javaee 5.0 jpa SSH 单元测试问题集锦

    本篇文章基于已经实现了ssh集成的demo.项目.具体的ssh项目怎么配置,请参考本文最后 spring环境下的JUnit4测试 1,下载所需jar包: spring-test-3.2.0.RELEA ...

  2. 【服务器防护】WEB防护 - WEBSHELL攻击探测【转载】

    原文:http://www.2cto.com/Article/201511/451757.html 1. 什么是webshell?     基于b/s架构的软件部署在Internet上,那么安全性是必 ...

  3. ORA-00205

    场景 数据库启动时报错.关闭前还是正常运行的,再次启动时,就报了以下错误. Copyright (c) , , Oracle. All rights reserved. Connected to an ...

  4. Myeclipse6.5项目启动时由于数据库连接失败的错误日志

    Java HotSpot(TM) 64-Bit Server VM warning: MaxNewSize (524288k) is equal to or greater than the enti ...

  5. 20160808_Shell书

    1. http://item.jd.com/11075150.html 2.

  6. linux下创建管理员组 使用 su - 命令

    通常情况下,用户通过执行“su -”命令.输入正确的root密码,可以登录为root用户来对系统进行管理员级别的配置.但是,为了更进一步加强系统的安全性,有必要建立一个管理员的组,只允许这个组的用户来 ...

  7. dom4j如何解析xml

    简单解析自己定义的xml文件,首先,给解析xml文件的类来个构造方法: public xmlData(File xmlFile) { file = xmlFile; try { saxReader = ...

  8. 在IIS7.5打开网页的时候,提示: HTTP 错误 500.0 - Internal Server Error 调用 LoadLibraryEx 失败,在 ISAPI 筛选器 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.dll" 上。解决方法

  9. Calendar类中add/set/roll方法的区别

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  10. robotframework笔记19

    后处理输出 使用时自动测试 在测试执行报告和日志生成,并使用它 分别允许创建自定义报告和日志以及结合 和合并的结果. 使用Rebot 简介 rebot [options] robot_outputs ...