C++基础--ifelse和switchcase的区别
if和switch的区别:⼀、语句的格式: if/else的写法格式如下:
int nA, nB;
scanf_s(\"%d\", &nA); //输⼊整数并赋值给变量a scanf_s(\"%d\", &nB);
(\"%d\", &nB); //输⼊整数并赋值给变量b if (nA > nB) {
printf(\"%d greater than %d\", nA, nB); } else {
printf(\"%d smaller than %d\", nA, nB); }
swith/case的写法如下:
int nA, nB;
scanf_s(\"%d\", &nA); //输⼊整数并赋值给变量a nB = nA + 1; switch (nA) {
case 1:
printf(\"when A is %d, B is\", nA, nB); case 2:
printf(\"when A is %d, B is\", nA, nB); default:
printf(\"when A is %d, B is\", nA, nB); }
⼆、逻辑结构:
从上⾯if/else与switch/case格式的区别可以看出:
A: if/else能根据逻辑判断输出相应的语句,也就是说if/else更多的是进⾏逻辑判断;
switch/case从某种⾓度上来说,没有相应的逻辑⽐较判断,⽽是根据给出项跳转到相应的分⽀; B: if判断相应的逻辑语句,返回true/false,每条if语句都会执⾏⼀次逻辑判断; switch/case会建⽴相应的跳转表,根据跳转表的项跳转到相应的分⽀。三、效率
从两种语句的判断上可以看出:
A: 从某种程度上,Switch/case⽐if/else的效率要⾼,除⾮if/else在第⼀次逻辑判断就为true; B: Switch/case需要建⽴⼀张跳转表,因此需要⼀定的空间的,更像是以空间换效率。 C: if/else能进⾏逻辑判断,⽽Switch不⾏,因此在需要进⾏逻辑判断时使⽤if/else语句;四、⽀持的数据类型
Switch/case只⽀持部分数据类型:int、long和枚举类型,由于byte、short、char都可以隐含转换为int,因此:switch⽀持的数据类型为:byte、short、char,int、long和枚举类型,不⽀持:boolean、float、double; if/else⽀持更多的数据类型,如String, double等;
建议:在能⽤Switch/case的情况下,尽量⽤Switch/case来提⾼效率;