switch-case内不能定义变量?1. 报错 switch(something){ case a: int a = 0; break; default: break; } 结果报错:error: cannot jump from switch statement to this case label……2. 错误原因 究其根本原因,是C++的⼀条规则:在任何作⽤域内,假如存在变量初始化语句...
如果您在switch的某个case语句中定义了一个变量,您不能在另一个case语句中再次定义同名变量,除非您使用嵌套块(如用{}包起来)。否则,编译器会报错,提示重复定义。 #include<iostream>intmain(){intvalue=1;switch(value){case1:{intx=5;// 定义在case 1中std::cout<<"Case 1: x = "<<x<<std::endl...
1.switch-case中的switch相当于goto, case相当于一个goto标签。 2. 在case中定义变量时必须在周围加{..}以形成局部作用域,否则编译报错。习惯上总是将case中的代码用{..}括起来,比较省事。是有些公司的coding convention之一。 01.switch(selector)02.{03.caseselector_a:04. {05.inti;06. }07.caseselec...
原来只是加不加括号的区别。 因为C++中变量的作用域是相邻的两个大括号,假设下面的例子: int nChoose; switch(nChoose) { case 1: int i = 1; break; case 2: break; default: break; } i的作用域是switch的两个大括号,这样如果nChoose的值是2的话,就会跳过i的声明 定义语句,出错是必然的。 所以,只...
不可以,C语言中的switch case中的case后面仅可以跟整形常量或常量表达式。原因:如果case后面跟 100>x>50是会出现逻辑错误的。首先C语言中像100>x>50这种表达式的意义并不和数学里的一样表示x落在(50,100)这个区间。这个在C语言中100>x会先被计算得到真或假。直接用关系运算得到的真和假在C语言...
switch语句中case后可为常量或简单的表达式(不可以有函数调用),不可以有任何的变量及变量表达式。switch 语句必须遵循下面的规则:switch 后的圆括号中是一个常量表达式,必须是一个整型或枚举类型。在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。所以,case ...
上面这种情况是不会通过编译的,原因是存在变量未初始化的问题,有下面两种情况: num = 1:执行case 1分支,a顺利的被初始化为1,执行完case 1之后,会顺序执行case 2,此时是没有任何问题的。 因为a在整个switch块中都是可见的,而不只是自身所在的case语句内部 ...
}//这种方法是不支持的。编译根本通过不了,因为 i 是一个变量 经过网上一翻查找,在jdk1.7中可能会支持这个功能。 但是问题就不能这么简单的解决,因为现在很多企业都没有在使用1.7的版本。 没事在电脑面前想出来一个办法,应该可以行得通在jdk1.6中解决 case不能使用变量的方法 ...
C 不允许 case 后面紧跟声明或定义,只允许表达式(expression); C++ 对这个没有限制 通用解法 当然我认为这样的代码可读性差,比较好的做法可以是将声明变量的事情放在头上做。 voidCaset(inta){switch(a) {intb;case1: b =1;// b = 1;printf("1: %d \n", b);break;case2: ...
必须是常量,因为进入switch语句后 是要去把条件和常量去比较的,所以只能是常量,不能是变量