今天学C++PRIMER的时候去看第六章基本语言里的SWITCH,看到了“对于switch结构,只能在它的最后一个case标号或default标号后面定义变量”这句话,以前没学过,于是打开VS2008自己动手测试一下。我写了一段最简单的代码用来测试,如下:
#include <iostream>
using namespace std;
void main()
{
char a;
switch(a=cin.get())
case 'a':
{int num=2;
cout<<"case a."<<num<<endl;
break;}
case 'b':
cout<<"case b."<<endl;
break;
default:
cout<<"case default"<<endl;
break;
}
结果出现了莫名其妙的错误
1>g:/vc++ 工程/case内变量定义测试/case内变量定义测试/main.cpp(12) : error C2046: 非法的 case
1>g:/vc++ 工程/case内变量定义测试/case内变量定义测试/main.cpp(14) : error C2043: 非法 break
1>g:/vc++ 工程/case内变量定义测试/case内变量定义测试/main.cpp(15) : error C2047: 非法的 default
1>g:/vc++ 工程/case内变量定义测试/case内变量定义测试/main.cpp(17) : error C2043: 非法 break
想也想不通,改了半天也改不对,于是百度之,看了几个网页之后大概知道了,貌似是switch结构少了花括号,于是加上花括号:
#include <iostream>
using namespace std;
void main()
{
char a;
switch(a=cin.get())
{
case 'a':
{int num=2;
cout<<"case a."<<num<<endl;
break;}
case 'b':
cout<<"case b."<<endl;
break;
default:
cout<<"case default"<<endl;
break;
}
}
再编译就能通过了。
仔细想想,觉得switch结构后面的语句也相当于是一个块,是得有花括号包裹起来,只不过这个问题以前是照本宣科从来没注意过,自己做一下,就出问题了,再一次证明了实践是很好而且必要的学习方法。