一个经典例子是统计原因个
switch(c)//假如c是'e'
{
case 'a';
++i;
case 'e';//这里满足个数+1
++i;
case 'k';
++i; //但是你上面不break这里也会执行i又+1
case 'o';
++i; // //但是你上面不break这里也会执行i又+1
}
{
case 'a';
++i;
case 'e';//这里满足个数+1
++i;
case 'k';
++i; //但是你上面不break这里也会执行i又+1
case 'o';
++i; // //但是你上面不break这里也会执行i又+1
}
也许你会觉得只执行一次++i,但是实际上后面都执行了,++i执行了三次,case语句不像if语句那样只执行条件符合语句。
switch case的处理是这样的,如果不加入break,那么他会顺着那个找到的case顺序执行下去,知道遇到break,或者return
据说这是 ansi c 的设计者有意为之,中文命为“贯穿”的特性
希望大家在开发过程中多注意些细节。
case 后面只能是整型或字符型的常量或常量表达式