简谈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语句后没有breakswitch(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没有breakswitch(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都没有breakswitch(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 ...
随机推荐
- Servlet与JSP版本历史以及Tomcat支持的版本
查询这个的关键字:Java EE的版本历史. JavaServer Pages (JSP) Java Servlet 参考: https://en.wikipedia.org/wiki/Java_EE ...
- NuGet包引用依赖问题
如A包需要引用B包,然后在项目中安装A包时,自动把B包也装上. 在nuget命令行打包的时候,如果是指定项目的csproj文件进行打包的,都只能打包当前项目的dll,那么如果使用了第三方的dll而没有 ...
- tyvj2018 小猫爬山
之前做过一道题"破锣摇滚乐队",把猫都编了号,每辆车只能装一些编号递增的猫,而且前一辆车的猫编号都比后一辆车小.那道题的DP状态是:f[i][j]表示装了前i只猫,使用了j辆车时第 ...
- 验证时出错。HRESULT = '8000000A'
往往出现在 做了安装项目后有警告: 解决办法: 这本来是在VS2005下创建的一下项目,后来改用VS2010的开发环境,.NET Framework的版本还是使用2.0, 但每次生成之后都会在解决方案 ...
- iOS开发者账号配置进行设备调试
PS:我特么写了这么久,居然图片消失了,服了. 问题一:苹果开发者账号类型: 分为三种:个人的(99美金一年).组织的(99美金一年)和企业账号(299美金一年),申请时需要信用卡,可以找淘宝的代理申 ...
- U盘容量减少的解决办法
今天是使用以前的U盘的时候发现原来4G的U盘容量居然只剩下了700M,不是说u盘的可用空间是700M,而是在电脑上面显示的总空间为700M.在电脑上面格式化之后也没起作用. 经过Google找到了在w ...
- 构建第一个maven工程
一.maven介绍 Maven 是一个强大的项目管理和构建自动化工具,它通过抽象的项目对象模型和构建生命周期模型来对项目及其构建过程进行管理,Maven 最大化的消除了构建的重复,提升了构建的效率与标 ...
- Git 常见问题整理
在学习git的过程中,遇到如下问题,特整理如下: 1 error:src refspec master does not match any 问题产生 a git服务器使用如下命令新建一个项目 $ c ...
- selenium 基本的键盘方法
今晚不想加班,于是赶紧回来看看书: 1.下了selenium的小工具:FireBug/FirePath. 2.确定了看书顺序,我觉得难度低点开始比较好,所以我还是先看基于Python的selenium ...
- C#编写滤镜 图片色调取反效果(Invert)
转自:http://www.it165.net/pro/html/201208/3469.html Invert 英文叫做颠倒.. 原理很简单也就是 将 255- 原本的值.. 这样 0(黑) 就会变 ...