请教理解这个c语言的switch-case语句。

这个程序的结果是:a=2,b=1;题目解释:首先,x=1符合条件case1,执行switch(y)语句,y=0符合case0语句,执行a++并跳出switch(y)语句,... 这个程序的结果是:a=2,b=1;
题目解释:
首先,x=1符合条件case 1,执行switch(y)语句,y=0符合case 0语句,执行a++并跳出switch(y)语句,此时a=1。
因为case 1语句后面没有break语句,所以向后执行case 2语句,执行a++,b++,然后跳出switch(x),得a=2,b=1。
我的疑惑:执行y的case 0之后跳到x的case 2;但是x不等于2,怎么也执行x的case 2 里面的语句呢?
展开
 我来答
youbl
2013-08-20 · TA获得超过2510个赞
知道大有可为答主
回答量:1844
采纳率:62%
帮助的人:1706万
展开全部
因为你的x的case 1的代码里没有break指令,所以程序会顺序执行完case 2的代码,碰到case 2的break指令后才跳出x的switch代码

c语言这点在其它语言,比如java或C#,case必须跟break配对,否则编译错误,c语言是不会编译出错的,但是程序可能出现你说的“x不等于2,怎么也执行x的case 2 里面的语句”的逻辑错误
pengguismile
2013-08-20 · TA获得超过687个赞
知道小有建树答主
回答量:332
采纳率:100%
帮助的人:130万
展开全部
我对楼主太崇拜了,
虽然用了N次了,都没想过这问题呢。
诸位都在说break;
那么:如下:
switch(2)
{
case 1:;
case 2:;
case 3:;
}
那我本意不想执行case 1,照诸位意思,Case1和case 2都会执行哦。
更多追问追答
追问

这个程序的结果是:a=2,b=2呢、奇怪

追答
如果没有break,都执行一遍,那么结果应该是3,3
#include "stdio.h"
void main()
{
int x=2,a=0,b=0;
switch(x)
{
case 1:a++;b++;break;
case 2:a++;b++;
case 3:a++;b++;
}
printf("%d,%d",a,b);
}
就是呀,以上结果为2,2,按诸位所说,肯定应该是1,1才对。然而以下程序:
#include "stdio.h"
void main()
{
int x=2,a=0,b=0;
switch(x)
{
case 1:a++;b++;break;
case 2:a++;b++;break;
case 3:a++;b++;
}
printf("%d,%d",a,b);
}
结果就对了,是1,1但你都采纳了估计没人回答了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我爱Xyy
2013-08-20 · TA获得超过280个赞
知道小有建树答主
回答量:508
采纳率:76%
帮助的人:129万
展开全部
switch-case语句是这样的,你的case最后如果没有break,那么他就会继续执行下一个case语句,
你的例子中,因为x=1,所以他找到了case(1),然后执行了,发现没有break,就继续执行下一条case语句。如果你的x=2,那么他就会执行case(2)的,发现最后是break,他就不会去执行case(3)的了!所以如果你只想程序执行一条case语句,那么记得最后要加一个break;
追问
这个问题我觉得不全面,我再出了个switch-case问题,一起来讨论吧,讨论好了给分哦~
http://zhidao.baidu.com/question/582910180.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳顶天鹿鼎记
2013-08-20 · TA获得超过502个赞
知道小有建树答主
回答量:675
采纳率:100%
帮助的人:414万
展开全部
因为你都已经说了case 1语句后面没有break语句
在switch case语句跳转到一个case后,就顺序执行,知道遇到break跳出。
追问
这个问题我觉得不全面,我再出了个switch-case问题,一起来讨论吧,讨论好了给分哦~
http://zhidao.baidu.com/question/582910180.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友3844c27
2013-08-20 · TA获得超过2952个赞
知道小有建树答主
回答量:782
采纳率:100%
帮助的人:471万
展开全部
会跳到的.如果没break的话..

这是switch的定义啊..多上机测试就好了..
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
carandcat123
2013-08-20
知道答主
回答量:20
采纳率:0%
帮助的人:20万
展开全部
case 1后面没有break语句,所以执行case 2语句
找到相应的case后,会一直执行后面的语句,直到碰到break语句或者switch结束,如果把case 2 后面的break语句剪切到case 3后面,程序在执行完case 2 后还会继续执行case 3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式