简谈switch case
工作中从buff里截取了一个字符串,然后和配置文件中的字符串名字对比 ,如果一样,处理,不一样,elseif 再判断,再处理! switch(){
case : case :
......
}
先说语法,再说注意事项
switch的判断变量类型只能是字符型或者整型,
请注意,只有这两种才可以switch后面紧跟的那个小括号里面 就是 要判断的变量名称
然后switch要求它后面的大括号完整,
不能不写case 后面加一个空格跟上条件
当然条件也只能是字符型或者整型,然后加上冒号,条件语句正式开始 ,
末了,不要忘记分号,然后每个case语句结束时不要忘记加上一个break;
至于原因稍后解释
在所有的判别情况都表述完之后 再加一个default:语句,
用法与case一样,但是注意的是default后面直接加:了,不需要再加判别条件,
default一定是加在所有的case语句最后的
switch选择结构执行的时候,从上往下寻找匹配,当寻找到第一个匹配条件后结束寻找,程序跳到该条件所对应的代码处执行,当执行完之后并不终止,而是继续执行下去,所以,在第一个匹配条件后的所有语句都会被执行,这也就是我们为什么要加一个break;的原因了,我们用break跳出当前switch语句来避免我们不希望的语句也被执行。default语句放在最后的原因也在这里了,default语句代表的意义是,无论如何(也就是说defautl是一个万能匹配)都会被执行的语句,如果是把它放到了非最后的位置了,那么它之下的所有语句都失去意义了,上面说过了,当得到第一个匹配之后就顺序执行了,default又是一个万能匹配,所有非case数据都会走 default下的执行语句,default不是必须的,但是我强烈建议每次都要写上,它处理所有你没有涉及到的情况之外的情况,可以避免漏掉某种可能……
常用的格式类型:
switch (控制表达式) {
case 常量表达式1: 语句列表1
case 常量表达式2: 语句列表2
...
default: 语句列表n
}
下边为网上搜的一个运行例子:
C/C++中switch
-
case
用法归纳
if
语句处理两个分支,处理多个分支时需使用
if
-
else
-
if
结构,但如果分支较多,则嵌套的
if
语句层就越多,程序不但庞大而且理解也比较困难.深层嵌套的
else
-
if
语句往往在语法上是正确的,但逻辑上却没有正确地反映程序员的意图。例如,错误的
else
-
if
匹配很容易被忽略。添加新的条件和逻辑关系,或者对语句做其他的修改,都很难保证正确性。因此,C/C++语言又提供了一个专门用于处理多分支结构的条件选择语句,称为
switch
语句,又称开关语句.它可以很方便地来实现深层嵌套的
if
/
else
逻辑。
使用
switch
语句直接处理多个分支(当然包括两个分支).其一般形式为:
switch
(表达式)
{
case
常量表达式1:
语句1;
break
;
case
常量表达式2:
语句2;
break
;
……
case
常量表达式n:
语句n;
break
;
default
:
语句n+1;
break
;
}
switch
语句的执行流程是:首先计算
switch
后面圆括号中表达式的值,然后用此值依次与各个
case
的常量表达式比较,若圆括号中表达式的值与某个
case
后面的常量表达式的值相等,就执行此
case
后面的语句,执行后遇
break
语句就退出
switch
语句;若圆括号中表达式的值与所有
case
后面的常量表达式都不等,则执行
default
后面的语句n+1,然后退出
switch
语句,程序流程转向开关语句的下一个语句.
以上是
switch
-
case
的正规写法,
default
语句总是写在最后。但是,如果把
default
语句间在了
case
的中间,执行的结果又是怎样的呢?笔者测试了一下几种有代表性的情况,把结果简单罗列如下:
A. 每个语句中
break
齐整
switch
(c)
{
case
'1'
:
printf
(
"1\n"
);
break
;
default
:
printf
(
"default\n"
);
break
;
case
'2'
:
printf
(
"2\n"
);
break
;
case
'3'
:
printf
(
"3\n"
);
break
;
}
此种情况最为规整,
default
写在中间跟写在最后的效果一致。
B.
default
语句后没有
break
switch
(c)
{
case
'1'
:
printf
(
"1\n"
);
break
;
default
:
printf
(
"default\n"
);
// break;
case
'2'
:
printf
(
"2\n"
);
break
;
case
'3'
:
printf
(
"3\n"
);
break
;
}
此种情况下,输入分别为 1、 2、 3、 4,对应的输出分别为 1、 2 、3、
default
2(换行省略了,实际运行时有换行的);即此种情况下遵循A中的执行顺序和一般的标号规则。
C. 最后一个
case
没有
break
switch
(c)
{
case
'1'
:
printf
(
"1\n"
);
break
;
default
:
printf
(
"default\n"
);
break
;
case
'2'
:
printf
(
"2\n"
);
break
;
case
'3'
:
printf
(
"3\n"
);
// break;
}
此种情况下,输入分别为 1、 2、 3、 4,对应的输出分别为1、2、3、
default
.可见实际的运行效果并不等同于把
default
语句挪到最后的运行效果。否则,输入为3时,输出应该为 3
default
.
D.
default
和最后一个
case
都没有
break
switch
(c)
{
case
'1'
:
printf
(
"1\n"
);
break
;
default
:
printf
(
"default\n"
);
// break;
case
'2'
:
printf
(
"2\n"
);
break
;
case
'3'
:
printf
(
"3\n"
);
// break;
}
由上面A,B,C三种情况的运行结果,我们可以推测出D这种情况的运行结果。当输入分别为 1、2、3、4时,输出为1、2、3、
default
2. 结果与B的情况相同。
kafka中的一个switch case的使用例子:
void msg_consume(RdKafka::Message* message, void* opaque) {
switch (message->err()) {
case RdKafka::ERR__TIMED_OUT:
break; case RdKafka::ERR_NO_ERROR:
/* Real message */
std::cout << "Read msg at offset " << message->offset() << std::endl; if (message->key()) {
std::cout << "Key: " << *message->key() << std::endl;
}
printf("%.*s\n",
static_cast<int>(message->len()),
static_cast<const char *>(message->payload()));
break; case RdKafka::ERR__PARTITION_EOF:
/* Last message */
if (exit_eof) {
run = false;
}
break; case RdKafka::ERR__UNKNOWN_TOPIC:
case RdKafka::ERR__UNKNOWN_PARTITION:
std::cerr << "Consume failed: " << message->errstr() << std::endl;
run = false;
break; default:
/* Errors */
std::cerr << "Consume failed: " << message->errstr() << std::endl;
run = false;
}
}
简谈switch case的更多相关文章
- MPI简谈
MPI简谈 MPI是分布式内存系统,区别于OpenMP和Pthreads的共享内存系统.MPI是一种基于消息传递的并行编程技术,是如今最为广泛的并行程序开发方法. MPI前世今生 MPI(Messag ...
- Android Studio快捷键switch case 轻松转换为if else
Android Studio快捷键switch case 轻松转换为if else 今天碰到的问题,没有找到资料,后面找到了方法,这个记下来,转载请注明出处:http://www.cnblogs.co ...
- java中的switch case
switch-case语句格式如下 switch(变量){ case 变量值1: //; break; case 变量值2: //...; break; ... case default: //... ...
- 为什么说在使用多条件判断时switch case语句比if语句效率高?
在学习JavaScript中的if控制语句和switch控制语句的时候,提到了使用多条件判断时switch case语句比if语句效率高,但是身为小白的我并没有在代码中看出有什么不同.去度娘找了半个小 ...
- .NET简谈接口
自从面向对象开发方式的出现,抽象的概念就开始日新月异的发展,面向对象编程.面向接口编程.面向组件编程等等:这一系列的概念都是软件工程所追求的思想范畴,高类聚低耦合. 今天我要简谈的是面向对象里面非常重 ...
- c语言基础表达式, 关系运算符, 逻辑运算符, 位运算符, 数据的取值范围, 分支结构(if...else, switch...case)
1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数 ...
- 运算符 与 分支语句:if ,else if,else;switch case
分支语句: if else if else : switch case --如何使用 if else if else: Console. ...
- switch...case和if...else if的判断应用
判断成绩所属等级的 两种方法 1... switch...case方法: #include<stdio.h> int main(void) { ;i <= ;++i) // ...
- go语言选择语句 switch case
根据传入条件的不同,选择语句会执行不同的语句.下面的例子根据传入的整型变量i的不同而打印不同的内容: switch i { case 0: fmt.Printf("0") case ...
随机推荐
- 实现socket非阻塞设置
刚开始学习,难免有些疏漏之处,请各位多多指教. 程序亲测可以使用.废话不多说. 网络IO模型分为阻塞IO.非阻塞IO.异步IO.IO复用.信号驱动IO. 阻塞IO: 有数据时,直接读:没有数据时,等待 ...
- ecshop /includes/lib_base.php、/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php Backdoor Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 ECShop是国内一款流行的网店管理系统软件,其2.7.3版本某个补丁存 ...
- SQLite Learning、SQL Query Optimization In Multiple Rule
catalog . SQLite简介 . Sqlite安装 . SQLite Programing . SQLite statements 1. SQLite简介 SQLite是一款轻型的数据库,是遵 ...
- CentOS禁用触摸板
安装xorg-x11-apps包 yum install xorg-x11-apps 查看设备信息 cd /dev/input/ ls //找到触摸板信息 xinput list //找到触摸板的id ...
- Python3导入cookielib失败
Python 3 改成 http.cookiejar了,所以只要改成import http.cookiejar就自动导入cookiejar了,如果还是不行,就把所有的.pyc删掉试试.
- CF 405B Domino Effect(想法题)
题目链接: 传送门 Domino Effect time limit per test:1 second memory limit per test:256 megabytes Descrip ...
- [Android]Unit Test for Android
根据Android Developer文档,对Android的UT做个学习总结: 1. 搭建Eclipse测试环境. Eclipse的ADT(Android Developer Tools) 插件为我 ...
- How to set up an FTP server on Ubuntu 14.04
How to set up an FTP server on Ubuntu 14.04 Setting up a fully-functional and highly secure FTP serv ...
- Apache Nutch v2.3 发布,Java实现的网络爬虫
http://www.oschina.net/news/59287/apache-nutch-2-3 Apache Nutch v2.3已经发布了,建议所有使用2.X系列的用户和开发人员升级到这个版本 ...
- windows7-PowerDesigner 15.1 的安装图解
下载 PowerDesigner 15.1 的安装文件和破解文件 破解文件下载地址:http://pan.baidu.com/share/link?shareid=177873&uk=3626 ...