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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Silent_memory 中级黑马   /  2014-3-6 21:17  /  1843 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Silent_memory 于 2014-3-12 22:19 编辑

帮我看下我写的语句为什么突然就报错了啊!
int a = 1; int b = 2; int c = 3;
switch(a)
{
    case 1:
        int d = b + c;
        printf("%i\n", d);
   default :
        printf("%d\n", a);
}

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1 有不懂的多问问大家 ~!

查看全部评分

5 个回复

倒序浏览
本帖最后由 兰WX 于 2014-3-6 22:16 编辑

错误1:int a=1;这里的分号你用成中文分号;
错误2:case1:
          int d = b +c;
         printf("%i\n", d);这么定义d变量是不对的,注意下变量作用域范围,如果要这么定义加花括号
      case1:
          {
          int d = b +c;
         printf("%i\n", d);
        }
错误3:case中结尾最好加个break;你这个default部分还是会执行到,没有跳出。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1 回答的很详细 ~!

查看全部评分

回复 使用道具 举报 1 0
case 1:
        int d = b + c;
        printf("%i\n", d);
大致可以理解成
case 1:
{
    int d=b+c;
}
printf("%i\n", d);
所以不对,不知道解释对不
回复 使用道具 举报
本帖最后由 兰WX 于 2014-3-7 09:56 编辑
77媛儿 发表于 2014-3-7 09:09
case 1:
        int d = b + c;
        printf("%i\n", d);

不能这么理解,case里最好不要定义变量,如果要定义也是局部变量,case 1:int d = b + c;这个语句定义的变量d作用域在整个swith,而不是case,如果没执行到case就会被认为没有定义变量d就去使用,所以会出错,因此才需要加花括号把d的作用域限定在case1.
回复 使用道具 举报
兰WX 发表于 2014-3-7 09:50
不能这么理解,case里最好不要定义变量,如果要定义也是局部变量,case 1:int d = b + c;这个语句定义的 ...

我的回答的跟你说的不是一个意思吗
回复 使用道具 举报
本帖最后由 兰WX 于 2014-3-7 12:54 编辑
77媛儿 发表于 2014-3-7 11:58
我的回答的跟你说的不是一个意思吗

还是不一样吧,他原来代码错误主要就是把变量d的作用域定义在整个swith中,你的理解已经把变量d的作用域定义在case1下面的{}中,和以前的作用域范围完全不一样了。你这个理解如果把printf里面的d换成a是正确代码,他原来代码即使把printf里面的d换成a还是错误的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马