C++新手一枚,近几日编写代码时,有如下错误,是关于C/C++中switch语句case中变量不能初始化赋值的问题。代码如下:
<pre name="code" class="cpp">#include <iostream>
using namespace std;
int main()
{
char op;
cin>>op;
switch(op)
{
case '0':
int a=3;
break;
default:
break;
}
return 0;
}
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">编译器会提示如下错误</span>
error C2361:"default"标签跳过'op'd的初始化操作
可是如果将第10行代码int a=3;改为int a; a=3;
编译器就不再提示错误。
这是为了防止下面这种错误
<pre code_snippet_id="495309" snippet_file_name="blog_20141024_1_2605774" class="cpp" name="code"><pre name="code" class="cpp">#include <iostream>
#include <iomainp>
using namespace std;
int main()
{
int op;
cin>>op;
switch(op)
{
case '1':
int a;
break;
case '2':
a=2;
break;
default:
break;
}
return 0;
}
在 上述代码中如果在case‘0’中进行了变量a的声明,而在case'2'中进行了使用,这会发生作用域错误。
而c++规定不能跳过变量初始化语句直接跳到变量的作用域内
这个错误属于语法问题,应加以记忆。解决方案有两种
1.case中如有变量初始化,一定要加{}
为什么?
加上{}就是新的作用域了,C89,ANSI C只能在新的作用域开始处定义变量
2.可把初始化放在switch之前
注意:int类型和用户自定义类型,实质都是一样的。都属于数据类型,只不过一个是简单数据类型,一个是复合数据类型