一道简单的C++题目,关于SWITCH语句

关键代码是这样的:switch(n){case16:++n;case17:n+=2;case18:++n;default:n++;}最后结果是21.有两个问题想问1.为什... 关键代码是这样的:
switch(n){
case 16:++n;
case 17:n+=2;
case 18:++n;
default:n++;
}
最后结果是21.

有两个问题想问
1.为什么我用F10单步i调试的时候看见,执行完CASE 17这一行之后,n的值为19,却会跳入了CASE 18这一行,为什么?
2.在执行CASE 18这一行的时候,我把++n,换成了n++,最终结果还是21
这是为什么?
忘说了。。int n= 17;
展开
 我来答
chw_throx
2011-01-07 · TA获得超过115个赞
知道答主
回答量:59
采纳率:0%
帮助的人:61.8万
展开全部
如果你不在每一个case语句后面加上break的话,你下面所有的case语句都会执行,直到遇到break,这种情况的术语叫做“直落”。
当你的n=17时,先执行case 17:n+=2;这是n=19,接着就执行case 18:++n,n=20,接着是default:n++; n=21。另外++n,和n++在递增的作用方面是一样的。

同理:如果输入 int n = 16的就会执行所有的case。
而Int n = 18 的话,就只会执行case 18和default的语句。

正确的写法应该是如下:
switch(n){
case 16:++n; break;
case 17:n+=2; break;
case 18:++n; break;
default:n++; break;
}

如果你以为在case语句中修改过n的值以后还会重新进行switch(n)的判断的话你就错了,switch(n)只会判断一次,在一些标准更严格的语言如Java中这里的n必须是不可变的,即不能给n重新赋值。
百度网友e3127003be
2011-01-07 · TA获得超过706个赞
知道小有建树答主
回答量:537
采纳率:0%
帮助的人:664万
展开全部
恭喜,你犯了经典的no break switch语句错误。
switch语句并不是分支语句而更像一个指定起点的语句,也就是说,你指定了n=17并且走到case 17之后的语句并执行之后,他会继续执行case 18:和default:之后的语句而不做任何判断。所以需要在每个case最后,加上一个break语句来跳出switch。
而我从你的意思推测,你并不是想执行一个分支语句而像是想通过连续判断语句来证实++n和n++的区别,那还是老老实实用if连续判断吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
beyond水木
2011-01-07 · TA获得超过117个赞
知道小有建树答主
回答量:224
采纳率:0%
帮助的人:0
展开全部
标准的switch语句应该是:
switch(n){
case 16:++n; break;

case 17:n+=2; break;

case 18:++n; break;

default:n++; break;
}
没有写break是答案是21的原因。
case 16以后,会顺序执行下面的语句。所以会跳入case 18

http://zhidao.baidu.com/question/155792813.html你看看这个,就会知道为什么跳入18了。
这样,你也会知道为什么++n和n++没有区别的原因了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友810698b
2011-01-07 · 超过12用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:40.4万
展开全部
没有break;就会从n值和CASE后的值相等的哪一行后面的每一个语句都运算一遍。知道遇到break或者全部完成开始。n++和++n这这个程序中都是一样的。都是执行n=n+1。所以肯定没影响的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友cfe5ffdcd
2011-01-07 · 超过15用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:52.2万
展开全部
break
回去看看break是干什么的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式