Switch-Case中break的作用
今天某个小弟弟又来问了一道题(格式什么的早已抛之脑后……我完了规范格式长啥样了):
#include<stdio.h>
main(void){
int a,i;
a = 0;
for(i = 1;i < 5; i++)
{
switch (i)
{
case 0:
case 3:
a+=2;
case 1:
case 2:
a+=3;
default:
a+=5;
}
}
printf("%d\n",a);
}
为何结果为31,当时我也没理解,结果查了一下switch-case详解才知道
话说VB确实有点坑爹,自从用了VB本身没怎么练习过完全忘了除了VB貌似都有break
这种东西。
当时还在想case为什么不是按照0 1 2 这样下来的,原来是有目的的执行的。
当初学PHP的时候貌似讲到break
说,如果不用break
会出现某种意料之外的错误(一类的),但具体是什么却不知道,今天看到这题总算是见识到了OTZ
如果没有添加break
则会顺序执行下面所有语句(据传说教科书上写执行所有接下来的case,故被坑)。
所以当 i = 1时,实际上,他会执行 case 2
中的 a+=3
和default
中的 a += 5
,得出a = 8
,而不是0
。default
中break
可有可无,但从习惯的角度似乎还是加上一个break
比较好。
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。
一直不知道switch和elseif有什么区别原来是这样 = =
真正的区别是 在大部分语言内,switch的case中都只能放常量。