A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程序猿-2014 中级黑马   /  2014-4-10 20:25  /  2016 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 程序猿-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啊    求解惑

8 个回复

倒序浏览
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.

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报


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.

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报

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了吧
回复 使用道具 举报
因为这个每个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一定可以完成

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
  1. int main(int argc, char * argv[])
  2. {
  3.     int x = 2,y= 3;
  4.     switch(x)        // x == 2,条件为真,执行switch{}里面的代码
  5.     {
  6.         case 2:      // 会依次执行,直到break或大括号
  7.             y++;     // y == 4
  8.         case 3:
  9.             y+=2;    // y == 6
  10.         case 4:
  11.             y+=3;    // y == 9
  12.         default:
  13.             y = 0;   // y == 0
  14.             break;   // 结束
  15.     }
  16.    
  17.     //打印结果 y=0
  18.     printf("y=%d\n", y);
  19. }
复制代码
回复 使用道具 举报
当case语句后没有遇到break语句就会继续执行代码,直到遇到break语句就会跳出整个程序;需要注意break与continue的区别:continue主要用于循环语句当中,当程序执行到continue语句就会跳出循环继续判断条件进行下一次循环,break语句是结束整个程序的意思

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
switch 是碰到breack才结束运行的,
所以是,一路运行下来。最后,default:
        y = 0;
        break;
y变0了

也就是每个case后面没有加breack.

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
case语句中缺少 break,程序不会跳出swith开关语句,而是会继续向下执行,直到在default中 y被赋值为0,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马