Estaba tratando de usar la declaración goto para viajar entre diferentes switch-cases . Entiendo, no es preferible usar goto ya que haría que el programa fuera difícil de entender, pero realmente lo necesito.
Aquí está la versión de ejemplo de mi código:
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; } Ahora, cuando ejecuto el código, aparece el siguiente error error: duplicate case value que se aplica tanto al goto case "c1" como al goto case "c2" .
No estoy seguro de por qué el compilador está pensando que el goto en un switch-case está redefiniendo otro case en la declaración de cambio con la misma condición y, por lo tanto, arroja ese error duplicado. Se agradece cualquier ayuda y las razones de este error.
¡Gracias!
En cualquier caso, la declaración de cambio no tiene sentido porque está utilizando literales de cadena como etiquetas de casos.
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; }La expresión en la declaración de cambio se convierte en un tipo integral o de enumeración que no se puede convertir implícitamente en punteros o literales de cadena.
Tal vez necesite usar caracteres literales como por ejemplo
case 'c1':El segundo problema es que no puede usar etiquetas de casos con sentencias goto. Puede usar con las sentencias goto solo etiquetas que se presentan como identificadores. La sintaxis de la instrucción goto es
goto identifier ;Entonces, el compilador piensa que las etiquetas de casos utilizadas en las instrucciones goto redefinen las etiquetas de casos ya introducidas.