C++中关于case中for循环的问题

来源:百度知道 编辑:UC知道 时间:2024/06/10 13:55:33
#include <iostream.h>

void main()
{
// char str[]="adfafda";
int str[]={12,12,1,1,1,123,12};
int num=1;
switch(num)
{
case 1:
// {
for(int i=0;i<5;i++)
{
cout<<str[i]<<" ";
}
break;
// }
default:
break;
}
}
很奇怪的事情,将被注释掉的两个大括号加上就会通过?这是怎么回事?
请高人指点。。。。

这是由于VC++和标准不一致造成的,我们来考察程序中那个for语句中的i的作用域,按照标准,在for的初始化部分声明的变量作用域应该在for中,而VC++把这个变量的作用域扩展到for所在的层次,就是说在for之后也是可以使用的,那么按照去掉大括号的程序,i的作用域是从声明之处到switch的大括号结束。而default标签跳过了i的声明语句却在i的作用域之中,这显然是有问题的。
之所以加上大括号是正确的,是因为大括号改变了i的作用域

按照标准,这段代码的错误是main函数的类型是int,其他没错。

首先明确,for(int i=0;i<5;i++); 这个for语句中定义了变量i,

而在CASE分支语句中要定义变量必须使用复合语句,就是说你必须把这个变量的定义写在一对“{ }”中

你可以试试下面的代码

#include <iostream>
using namespace std;

void main()
{
int k;
switch(k)
{
case 1:
{//这对花括号将m置于复合语句中-----------m

int m=0;

{//这对花括号将i置于复合语句中*******i

for(int i=0;i<5;i++)
{
cout<<i;
}

}//for i*****************************i

cout<<m<<endl;

}//for m----------------------------------m
break;
default:
break;
}
}

在switch语句中,“case 常量表达式”只相当于一个语句标号,