黑马程序员技术交流社区

标题: switch 语句为什么报错啊!无解 [打印本页]

作者: Silent_memory    时间: 2014-3-6 21:17
标题: switch 语句为什么报错啊!无解
本帖最后由 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);
}
作者: 兰WX    时间: 2014-3-6 22:05
本帖最后由 兰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部分还是会执行到,没有跳出。
作者: 77媛儿    时间: 2014-3-7 09:09
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:50
本帖最后由 兰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.
作者: 77媛儿    时间: 2014-3-7 11:58
兰WX 发表于 2014-3-7 09:50
不能这么理解,case里最好不要定义变量,如果要定义也是局部变量,case 1:int d = b + c;这个语句定义的 ...

我的回答的跟你说的不是一个意思吗
作者: 兰WX    时间: 2014-3-7 12:53
本帖最后由 兰WX 于 2014-3-7 12:54 编辑
77媛儿 发表于 2014-3-7 11:58
我的回答的跟你说的不是一个意思吗

还是不一样吧,他原来代码错误主要就是把变量d的作用域定义在整个swith中,你的理解已经把变量d的作用域定义在case1下面的{}中,和以前的作用域范围完全不一样了。你这个理解如果把printf里面的d换成a是正确代码,他原来代码即使把printf里面的d换成a还是错误的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2