switch +case 的语句 如果每个case后面 不加break的话 会不会有什么后果啊,会逻辑错误吗

wodetn 2011-05-05 10:45:20
RT
...全文
4279 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
wizard_tiger 2011-05-07
  • 打赏
  • 举报
回复
如果不加break就会从符合条件的case一直向后执行,直至遇到break或switch运行结束。
ljt3969636 2011-05-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wodetn 的回复:]

引用 4 楼 ljt3969636 的回复:
一个经典例子是统计原因个数

C/C++ code

switch(c)//假如c是'e'
{
case 'a';
++i;
case 'e';//这里满足个数+1
++i;
case 'i';
++i; //但是你上面不break这里也会执行i又+1
case 'o';

++i; // //但是你上面不break……
[/Quote]

呵呵,谁让你不break呢
staticabc 2011-05-06
  • 打赏
  • 举报
回复
看来楼主没有系统的看过C啊,推荐楼主看《C Primer Plus》,买一本当工具书挺不错的。
辰岡墨竹 2011-05-06
  • 打赏
  • 举报
回复
因为这样实现比较简单,用汇编的话,switch就一个查表跳转就足够了,之后的case之间是连续没有间隙的。否则还要每个再插入一个条件判断。C追求效率高,直接的实现。如果设计不贯穿加continue,万一外面正好有个循环,就没法继续循环了。不过很多高级语言,比如Basic是没有贯穿特性的只能用goto连接。
我真的是琦琦 2011-05-06
  • 打赏
  • 举报
回复
case完成后不加break,就继续运行接下来的case...
longdenghua 2011-05-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ljt3969636 的回复:]
如果不break会执行满足这个case之后的其他case的语句直达switch结束或者遇到break
[/Quote]

++
wxl19900320 2011-05-06
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 csiyou 的回复:]

switch结构中的case只有在遇到break的时候才会停止,你如果不加break的话,它就会把这个case后面的case语句也进行执行。有时候有需要的话,可以不加break
[/Quote]

就是这样的
fiahyjw 2011-05-06
  • 打赏
  • 举报
回复
直接执行下面的语句,后面的case都会被执行
zhengjiankang 2011-05-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhao4zhong1 的回复:]

引用 10 楼 anyidan 的回复:
据说这是 ansi c 的设计者有意为之,中文命为“贯穿”的特性

如果当初是我设计c,我就case默认break,想“贯穿”的时候加continue。
可惜啊!
[/Quote]
楼上有才。很好。
陈思有 2011-05-06
  • 打赏
  • 举报
回复
switch结构中的case只有在遇到break的时候才会停止,你如果不加break的话,它就会把这个case后面的case语句也进行执行。有时候有需要的话,可以不加break
赵4老师 2011-05-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 anyidan 的回复:]
据说这是 ansi c 的设计者有意为之,中文命为“贯穿”的特性
[/Quote]
如果当初是我设计c,我就case默认break,想“贯穿”的时候加continue。
可惜啊!
gakki88 2011-05-06
  • 打赏
  • 举报
回复
不叫break的话,switch没有意义了,就会顺序执行下去
AnYidan 2011-05-06
  • 打赏
  • 举报
回复
据说这是 ansi c 的设计者有意为之,中文命为“贯穿”的特性
hzc543806053 2011-05-06
  • 打赏
  • 举报
回复
如果没加break的话 每个case后面的式子都会计算一遍·
jernymy 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wodetn 的回复:]
引用 4 楼 ljt3969636 的回复:
一个经典例子是统计原因个数

C/C++ code

switch(c)//假如c是'e'
{
case 'a';
++i;
case 'e';//这里满足个数+1
++i;
case 'i';
++i; //但是你上面不break这里也会执行i又+1
case 'o';

++i; // //但是你上面不break这……
但是后面的3次貌似不满足判断条件呢 会执行吗
[/Quote]

switch case的处理是这样的,
如果不加入break,那么他会顺着那个找到的case顺序执行下去,知道遇到break,或者return
wodetn 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ljt3969636 的回复:]
一个经典例子是统计原因个数

C/C++ code

switch(c)//假如c是'e'
{
case 'a';
++i;
case 'e';//这里满足个数+1
++i;
case 'i';
++i; //但是你上面不break这里也会执行i又+1
case 'o';

++i; // //但是你上面不break这里也会执行i又+1
cas……
[/Quote]但是后面的3次貌似不满足判断条件呢 会执行吗
ljt3969636 2011-05-05
  • 打赏
  • 举报
回复
一个经典例子是统计原因个数

switch(c)//假如c是'e'
{
case 'a';
++i;
case 'e';//这里满足个数+1
++i;
case 'i';
++i; //但是你上面不break这里也会执行i又+1
case 'o';
++i; // //但是你上面不break这里也会执行i又+1
case 'u';
++i; //但是你上面不break这里也会执行i又+1
}
这样一个原因本来加一次你加了四次
ljt3969636 2011-05-05
  • 打赏
  • 举报
回复
如果不break会执行满足这个case之后的其他case的语句直达switch结束或者遇到break
  • 打赏
  • 举报
回复
不过不return的话,接着运行下面的case
higter 2011-05-05
  • 打赏
  • 举报
回复
还会后面的case

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧