switch-case语句里的一些注意事项:
在switch-case语句里,在case这一层可以声明变量,但不能初始化;
解决方法:
- 在case外面先声明初始化完,再在case里使用。
- 用if-else来代替switch。
- case后面加上{ }。//(由于switch的几个case语句在同一个作用域(因为case 语句只是标签,它们共属于一个swtich语句块),所以如果在某个case下面声明变量的话,对象的作用域是在俩个花括号之间 也就是整个switch语句,其他的case语句也能看到,这样的话就可能导致错误。)
(我们可以通过在case后面的语句加上大括号处理,之所以加大括号就是为了明确我们声明的变量的作用域,就是仅仅在本case之中,其实为了更规范的写switch-case语句,我们应该在case语句后边加大括号。)
就像洛谷题单里的顺序结构里有一道题可以这么写:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a;
scanf("%d",&a);
switch(a)
{
case 1:printf("I love Luogu!");break;
case 2:
{
int all=10,b=2,u=4;
int ba;
ba=all-b-u;
printf("%d %d",a+u,ba);
break;
}
case 3:{
int apple = 14;
int stu = 4;
int m,n,v;
m=apple/stu;
v=m*stu;
n=apple%stu;
printf("%d\n%d\n%d",m,v,n);
break;
}
case 4:{
double t;
t=500.0/3.0;
printf("%.3lf",t);
break;
}
case 5:{
printf("%d",(260+220)/(12+20));
break;
}
case 6:{
cout<<sqrt(6*6+9*9);
break;
}
case 7:{
printf("%d\n",100+10);
printf("%d\n",100+10-20);
printf("%d",0);
break;
}
case 8:{
double pi=3.141593;
int r=5;
cout<<2*pi*r<<endl;
cout<<pi*r*r<<endl;
cout<<4*pi*r*r*r/3;
break;
}
case 9:{
int g=1;
int w;
for( w=0;w<3;w++){
g=(g+1)*2;
}
printf("%d",g);
break;
}
case 10:{
printf("%d",9);
break;
}
case 11:{
cout<<100.0/3.0;
break;
}
case 12:{
char a='A';
printf("13\n");
printf("%c",a+17);
break;
}
case 13:{
int pi=3.141592653;
cout<<(int)pow(4*pi*4*4*4/3+4*pi*10*10*10/3,(1.0/3.0));
break;
}
case 14:{
int a[2];
int j = 0;
for (int i = 0; i < 100; i++)
{
if ((110 - i) * (10 + i) == 3500)
{
a[j++] = 110 - i;
}
}
if (a[0] >= a[1])
cout << a[1];
else
cout << a[0];
}
return 0;
}
}