我尝试使用goto
语句在不同的switch-cases
之间穿梭。我明白,使用goto
并不可取,因为它会使程序难以理解,但我真的需要它。
以下是我的代码的示例版本:
switch(something){
case "c1":
//some code
break;
case "c2":
//some code
break;
case "c3":
if(condition1)
goto case "c1";
if(condition2)
goto case "c2";
default:
break;
}
现在,当我运行代码时,我得到了以下适用于goto case "c1"
和goto case "c2"
的错误error: duplicate case value
。
我不知道为什么编译器会认为switch-case
上的goto
正在使用相同的条件在switch语句中重新定义另一个case
,从而抛出重复的错误。感谢对此错误的任何帮助和原因。
谢谢!
发布于 2021-11-11 14:21:07
在任何情况下,switch语句都没有意义,因为您使用字符串文字作为case标签。
switch(something){
case "c1":
//some code
break;
case "c2":
//some code
break;
case "c3":
if(condition1)
goto case "c1";
if(condition2)
goto case "c2";
default:
break;
}
switch语句中的表达式转换为整型或枚举类型,而该类型不能隐式转换为指针或字符串文字。
也许您需要使用字符文字,例如
case 'c1':
第二个问题是goto语句不能使用case标签。您只能在goto语句中使用以标识符表示的标签。goto语句的语法为
goto identifier ;
因此,编译器认为goto语句中使用的case标签重新定义了已经引入的case标签。
https://stackoverflow.com/questions/69929810
复制相似问题