黑马程序员技术交流社区
标题:
关于switch的问题
[打印本页]
作者:
程序猿-2014
时间:
2014-4-10 20:25
标题:
关于switch的问题
本帖最后由 程序猿-2014 于 2014-4-15 18:39 编辑
int x = 2,y=3;
switch(x)
{
case 2:
y++;
case 3:
y+=2;
case 4:
y+=3;
default:
y = 0;
break;
}
printf("y=%d\n", y);
这个题 运算结果 Y为什么等于0啊 求解惑
作者:
一只小菜鸟
时间:
2014-4-10 20:30
ps:你是一次性看完视频了,把前面做错的都拿出来了么、。、、
case 2:
y++;
case 3:
y+=2;
case 4:
y+=3;
default:
y = 0;
break;
当x=2时,执行y++ y=4;没有break;继续
y+=2->y=6; 没有break;继续
y+=3->y=9;没有break;继续
y=0;break跳出,输出。所以y=0.
作者:
啊康
时间:
2014-4-10 20:35
int x = 2,y=3;
switch(x)
{
case 2:
y++;
case 3:
y+=2;
case 4:
y+=3;
default:
y = 0;
break;
}
printf("y=%d\n", y);
switch语句如果条件为真则执行相应语句,直到遇到break或者大括号时结束
你这个代码是执行switch(2)为真,开始执行case2:下面的语句,
由于你们case紧跟后面都没有break结束语句,所以程序会一直执行下去,直到遇到 y = 0;后面的那个break语句才结束
那么最后是将0赋值给了y,最后打印出来的结果自然是0.
作者:
luoyilan222
时间:
2014-4-10 22:47
int x = 2,y=3;
switch(x)
{
case 2:
y++;
breack;
case 3:
y+=2;
breack;
case 4:
y+=3;
breack;
default:
y = 0;
break;
}
printf("y=%d\n", y);
兄弟你应该是忘每一个case都需要加break了吧
作者:
星河鹭起
时间:
2014-4-11 10:48
因为这个每个case缺少break,导致会一直运行下去,每运行一个case,y就会完全覆盖前面的。当运行到dafault时,y覆盖前面的值,导致y变成了0,然后退出。打印结果就是0了。下面是我自己对switch语句做的笔记,可以参考下:
switch语句:
格式:switch(数值){
case 数值:
break;
}
注:(1)如果case中没有遇到break,则会一直执行所有的case语句,直到遇到break为止。
(2)如果在case后定义新变量,则必须使用大括号(解决变量作用域问题)。
(3)if能完成的,switch不一定可以完成。switch能完成的,if一定可以完成
作者:
于清扬
时间:
2014-4-11 13:37
int main(int argc, char * argv[])
{
int x = 2,y= 3;
switch(x) // x == 2,条件为真,执行switch{}里面的代码
{
case 2: // 会依次执行,直到break或大括号
y++; // y == 4
case 3:
y+=2; // y == 6
case 4:
y+=3; // y == 9
default:
y = 0; // y == 0
break; // 结束
}
//打印结果 y=0
printf("y=%d\n", y);
}
复制代码
作者:
heima-王鹏
时间:
2014-4-11 15:14
当case语句后没有遇到break语句就会继续执行代码,直到遇到break语句就会跳出整个程序;需要注意break与continue的区别:continue主要用于循环语句当中,当程序执行到continue语句就会跳出循环继续判断条件进行下一次循环,break语句是结束整个程序的意思
作者:
戴文婷
时间:
2014-4-14 02:29
switch 是碰到breack才结束运行的,
所以是,一路运行下来。最后,default:
y = 0;
break;
y变0了
也就是每个case后面没有加breack.
作者:
葬花桥
时间:
2014-4-21 19:14
case语句中缺少 break,程序不会跳出swith开关语句,而是会继续向下执行,直到在default中 y被赋值为0,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2