先说一个现象 有时候在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子句处理错误情况的能力。

}