CodeSky 代码之空

随手记录自己的学习过程

Switch-Case中break的作用

2014-01-23 23:17分类: C评论: 2

今天某个小弟弟又来问了一道题(格式什么的早已抛之脑后……我完了规范格式长啥样了):

1#include<stdio.h>
2main(void){
3    int a,i;
4    a = 0;
5    for(i = 1;i < 5; i++)
6    {
7        switch (i)
8        {
9        case 0:
10        case 3:
11            a+=2;
12        case 1:
13        case 2:
14            a+=3;
15        default:
16            a+=5;
17        }
18
19    }
20    printf("%d\n",a);
21}
22

为何结果为31,当时我也没理解,结果查了一下switch-case详解才知道

话说VB确实有点坑爹,自从用了VB本身没怎么练习过完全忘了除了VB貌似都有break这种东西。

当时还在想case为什么不是按照0 1 2 这样下来的,原来是有目的的执行的。 当初学PHP的时候貌似讲到break说,如果不用break会出现某种意料之外的错误(一类的),但具体是什么却不知道,今天看到这题总算是见识到了OTZ

如果没有添加break则会顺序执行下面所有语句(据传说教科书上写执行所有接下来的case,故被坑)。 所以当 i = 1时,实际上,他会执行 case 2中的a+=3default中的 a += 5,得出a = 8,而不是0defaultbreak可有可无,但从习惯的角度似乎还是加上一个break比较好。

评论 (1)

YQ2016年4月17日 16:34

一直不知道switch和elseif有什么区别原来是这样 = =

敖天羽2016年4月18日 12:44

真正的区别是 在大部分语言内,switch的case中都只能放常量。