这会报错!编译器会提示如下错误error C2361: “default”标签跳过“a”的初始化操作
将代码int a=1;改为int a; a=1;编译器就不再提示错误。
如下:
#include <iostream>
using namespace std;
int main()
int op;
cin>>op;
switch(op)
case 1:
int a;
break;
case 2:
a = 2;
break;
case 3:
a = 3;
break;
default:
break;
return 0;
也可将代码改成如下,编译器不提示错误。
#include <iostream>
#include <iomainp>
using namespace std;
int main()
int op;
cin>>op;
switch(op)
case 1:
int a;
break;
case 2:
break;
case 3:
a = 3;
break;
default:
break;
return 0;
在 上述会报错的原代码中如果在case‘0’中进行了变量a的声明,且同时初始化了( int a = 1; ),而当其他dcase:中进行了使用(赋值)时,这会发生作用域错误。
错误原因:
switch里面的语句属于同一作用域范围,即case 1里面只声明(int a)的变量在switch任何范围都是可以使用的,理论上case 2也可以使用case 1的未初始化变量。
但是如果变量a的声明的同时初始化了在case 1里面,但是op直接等于2、3、4.....的话,就没有运行case 1的语句,这样的话就会导致变量还没有定义,所以会报错误!
而!!!
C++规定:不允许跨过变量的初始化语句直接跳转到该变量作用域内的另一个位置。这就要求我们在case
语句中不能对变量进行初始化操作(可以进行声明定义,声明定义是在编译时期发生的,所以无论如何都无法跳过,但是初始化是可以跳过的,但是这种操作是不被允许的)。
解决:
如果我们想要在case
语句中定义并初始化一个变量,
则解决方案有两种
1.case中如有变量初始化,一定要加 {} ,变量定义在块内,从而确保后面所有的case
标签都在变量的作用域之外
加上{}就是新的作用域了,C89,ANSI C只能在新的作用域开始处定义变量
2.可把初始化放在switch之前
注意:int类型和用户自定义类型,实质都是一样的。都属于数据类型,只不过一个是简单数据类型,一个是复合数据类型
3.将需要的部分写成一个函数 (本质还是方法一)
今天陈红军老师在用到switch的时候,这种设计到最基本的内容,可能忘记它的一些基本语法,出现了一些错误,所以即兴从各种资料查询总结了下面的内容,希望可以帮助那些正在困扰switch错误和各种细节问题的朋友!
1.switch-case注意事项:
switch(A),括号中A的取值只能是整型或者可以转换为整型的数值类型,比如byte、short、int、ch...
在写java
中,出现使用
switch case时报错,显示“java:不兼容类型,int 无法转换为bolean”,在拒绝修改为if-else
语句后,根据
switch case 的基本原理找出了修改方法:
首先,先让我们来了解一下
switch case:
switch 语句由一个判断条件或者是一个
变量和多个
case语句以及最后的default组成。
switch (
变量/判断条件){
题目3.33:
我想说的并不是这道题,而是switch case 结构
switch case结构里,不能在case里定义变量,但可以在switch内和case前定义变量,就像下面代码中的这样,而且经检验在switch中定义的变量会在switch结束后被回收/清除,每次进入switch都会定义新的变量
#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;
#define QEl
1.同一个定义域内定义重名
变量
2.使用未被
初始化的
变量
switch-
case里面定义的
变量只能在
switch选择
语句内有效,同一作用域下
不能出现同名的
变量。
刚开始我没搞明白,既然a的作用域是在
switch-
case内,为什么在
case2里面无法调用a的值呢?其实
问题不在于能
不能调用a,而是a没有
初始化,所以报错。本文章参考:Java – 在
switch case语句中声明
变量
在写仪器管理系统时,在用switch case写选择 时,发现一个小问题,当在case下面直接初始化变量时,会报错“对‘ temp’的初始化被‘ case’标签跳过”
switch(cho3)
case 1:
department temp;//创建一个新...
1.switch参数类型:
switch 后面的表达式不能跟double,float,long,String ,boolean,可以接int,short,byte,char!
2.switch中定义变量问题:
问题点:
switch (a)
case 1:
CString str="AB
CSDN-Ada助手:
未初始化的数组的值都是随机的?不!
Aiden_114:
使用Numpy模块操作像素
CSDN-Ada助手: