| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7519 人关注过本帖
标题:关于switch嵌套switch的问题
只看楼主 加入收藏
slowlybear
Rank: 1
等 级:新手上路
帖 子:90
专家分:0
注 册:2006-10-18
收藏
 问题点数:0 回复次数:12 
关于switch嵌套switch的问题

程序如下:
#include <iostream>;
using namespace std;
void main()
{
int x=1,y=0,a=0,b=0;
switch (x)
{
case 1:switch(y)
{
case 0:a++;break;
case 1:b++;break;
}
case 0:a++;b++;break;
}
cout<<a<<","<<b<<endl;
}
运行结果是 2,1
为什么会执行到 case 0后面的语句呢? x的值没有变化啊,感觉是出现switch(y)以后,开始变成判断y了,可是不是只应该在
case 1:switch(y)
{
case 0:a++;break;
case 1:b++;break;
}
这一块才对Y进行判断吧?

搜索更多相关主题的帖子: switch 嵌套 
2006-11-16 18:15
lrgsz
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-9-27
收藏
得分:0 
#include <iostream>;
using namespace std;
void main()
{
int x=1,y=0,a=0,b=0;
switch (x)
{
case 1:switch(y)
{
case 0:a++;break;
case 1:b++;break;
}break;
case 0:a++;b++;break;
}
cout<<a<<","<<b<<endl;
}
你再试试!

学习如逆水行舟,不进则退!
2006-11-16 22:41
slowlybear
Rank: 1
等 级:新手上路
帖 子:90
专家分:0
注 册:2006-10-18
收藏
得分:0 

加了break以后应该正常,我就是不明白为什么原来的程序,不加break按道理应该也不会执行到case 0后面的啊,到底是怎么回事呢?


2006-11-16 22:59
dragonfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1024
专家分:0
注 册:2006-3-20
收藏
得分:0 
switch里的Case是入口,break是出口,如果case后面没遇到Break会一直执行到switch结束而不管下一个case的条件成立与否!这和VB不一样!我去华为面试时就载到这个问题上了!

2006-11-17 13:11
shany
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-10-3
收藏
得分:0 

觉得不对.因为在执行完
case 1:switch(y)
{
case 0:a++;break;之后就退出这个开关语句了,然后再执行外面这个开关语句.
所以输出应该是 1,0 呀.
怎么会是 2,1呢??


我可以接受失败,但不能接受放弃 ;)
2006-11-17 16:21
lengfei6297
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-10-30
收藏
得分:0 

switch (x)
{
case 1:switch(y)
{
case 0:a++;break;
case 1:b++;break;
}
case 0:a++;b++;break;
}
这个问题 偶理解为:

这里的break只是跳出与之相对的该层switch,所以对于内部嵌套的switch,每当遇到break时,就跳出该层switch执行到

括号之外,在判断是否有break,如果没有就一直向下执行。

2006-11-17 16:41
shany
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-10-3
收藏
得分:0 
对啊
那这个程序是否执行了
case 1:switch(y)
{
case 0:a++;break后就跳出 switch(y)了,然后执行switch (x),但因为不满足case 0所以就结束switch (x)了呀,那答案为什么是 2,1呢?

我可以接受失败,但不能接受放弃 ;)
2006-11-17 16:50
lengfei6297
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-10-30
收藏
得分:0 

不对,

因为在上面跳出那层的switch之后,如果没有遇到break,它就会继续往下执行,直到遇到一个break才跳出该层switch;

例如;

int x = 0;

switch(x)

{

case 0: x++;

case 1:cout<<x;

break;

case 2:x = 5;

break;}

当你执行的时候,当x=0时,满足了,执行x++之后,它并不会跳出,它还要继续执行,直到下面遇到第一个break,

它才结束执行。

所以,对于你的那个程序,象楼上说的这样就对了。

#include <iostream>;
using namespace std;
void main()
{
int x=1,y=0,a=0,b=0;
switch (x)
{
case 1:switch(y)
{
case 0:a++;break;
case 1:b++;break;
}break;
case 0:a++;b++;break;
}
cout<<a<<","<<b<<endl;
}

2006-11-17 18:07
slowlybear
Rank: 1
等 级:新手上路
帖 子:90
专家分:0
注 册:2006-10-18
收藏
得分:0 
没错,如果没有碰到break,会一直向下,但是这是选择结构啊,不合条件应该不会运行。比如:
#include <iostream>;
using namespace std;
void main()
{
int x=1;
switch (x)
{
case 0:cout<<"xiao";
case 1:cout<<"yes";
case 2:cout<<"da";
}
}
像这样不加break,虽然都运行到了,但也只会输出yes啊,另外两条没有运行呢。


2006-11-17 18:56
lengfei6297
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-10-30
收藏
得分:0 

不是吧,

我在vc6.0上运行,它会出现yesda呀。

它是进行选择,x的表达式计算的结果是1,它会执行case 1:后面的语句,当执行完之后,未遇到break

则继续向下执行,直到遇到break或者结束。

2006-11-17 19:57
快速回复:关于switch嵌套switch的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017823 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved