
一道简单的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; 展开
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; 展开
展开全部
如果你不在每一个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重新赋值。
当你的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重新赋值。
展开全部
恭喜,你犯了经典的no break switch语句错误。
switch语句并不是分支语句而更像一个指定起点的语句,也就是说,你指定了n=17并且走到case 17之后的语句并执行之后,他会继续执行case 18:和default:之后的语句而不做任何判断。所以需要在每个case最后,加上一个break语句来跳出switch。
而我从你的意思推测,你并不是想执行一个分支语句而像是想通过连续判断语句来证实++n和n++的区别,那还是老老实实用if连续判断吧。
switch语句并不是分支语句而更像一个指定起点的语句,也就是说,你指定了n=17并且走到case 17之后的语句并执行之后,他会继续执行case 18:和default:之后的语句而不做任何判断。所以需要在每个case最后,加上一个break语句来跳出switch。
而我从你的意思推测,你并不是想执行一个分支语句而像是想通过连续判断语句来证实++n和n++的区别,那还是老老实实用if连续判断吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
标准的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++没有区别的原因了。
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++没有区别的原因了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有break;就会从n值和CASE后的值相等的哪一行后面的每一个语句都运算一遍。知道遇到break或者全部完成开始。n++和++n这这个程序中都是一样的。都是执行n=n+1。所以肯定没影响的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
break
回去看看break是干什么的。
回去看看break是干什么的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询