您的位置:首页 > 编程语言 > C语言/C++

读c语言深度剖析 -- switch case

2011-06-21 21:35 204 查看
先说一个现象 有时候在switch中定义变量没有问题,有时候会报错。
百度得知: 基本功不到家.
原来只是加不加括号的区别。
因为C++中变量的作用域是相邻的两个大括号 例子如下
int Val;
switch(Val)
{
case 1:
int i = 1;
break;
case 2:
break;
default:
break;
}
其中case1 后边的变量 i 的作用域是switch的两个大括号
vc6 直接编译出错
error C2360: initialization of 'i' is skipped by 'case' label
: see declaration of 'i'
error C2361: initialization of 'i' is skipped by 'default' label
: see declaration of 'i'
case.exe - 2 error(s), 0 warning(s)
错误很明显 就是 程序 会跳过i的声明 定义语句
解决方法 加个大括号 限制变量的作用域 即可
int Val;
switch(Val)
{
case 1:
{int i = 1;}
break;
case 2:
break;
default:
break;
}

既然有了if、else组合为什么还需要switch、case组合呢?
if、else一般表示两个分支或是嵌套表示少量的分支,但如果分支很多的话……还是用
switch、case组合吧。其基本格式为:
switch(variable)
{
case Value1:
//program code (这里的代码尽量不要超过20行。可以写成子函数调子函数)
case 后面可以是枚举类型整形,包括bit,int,long。在C++里的话用字符也可以,
字符在内存中是以 asc 码存放的
比如case 'c',因为字符在内存里是用一个整数来表示的,也就是传说中的ASC
break; 每个case语句的结尾绝对不要忘了加break

case Value2:
//program code
break;

case Value3:
//program code
break;

default: 最后必须使用default分支。即使程序真的不需要default处理,也应该保留
break; default子句只用于检查真正的默认情况。(别为了少敲代码而使用default做为最后一种情况)
这样将失去case语句的标号所提供的自说明功能,而且也丧失了使用default子句处理错误情况的能力。
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息