Saltar a la etiqueta del caso en la declaración del interruptor
Este artículo discutirá el uso de sentencias switch
en C++. Además, discutirá los errores que pueden surgir al usar la instrucción switch
, incluido el error Jump to case label
.
la instrucción switch
en C++
La instrucción switch
evalúa una expresión booleana o entera dada y ejecuta la(s) declaración(es) asociadas con los casos
en función de la evaluación de la expresión dada. Es la mejor alternativa a las largas declaraciones if-else-if
, ya que reduce la longitud del código y mejora la claridad.
En C/C++, se utiliza la siguiente sintaxis para la instrucción switch
para realizar la evaluación.
Sintaxis:
switch (exp) {
case a:
// Block of code
break;
case b:
// Block of code
break;
default:
// Block of code
}
La instrucción switch
funciona de la siguiente manera:
- La expresión se evalúa una vez en la sentencia
switch
. - El valor
case
se compara con el valorswitch
. - Después de evaluar la expresión
switch
con una declaracióncase
, el bloque de código posterior alcase
coincidente se ejecuta si la condición es verdadera. - Las palabras clave
break
ydefault
son opcionales con la instrucciónswitch
. Los discutiremos en detalle al final de este tutorial.
Supongamos que queremos calcular el nombre del día de la semana a partir del número del día de la semana.
Código de ejemplo:
#include <iostream>
using namespace std;
int main() {
int weak_day = 3;
switch (weak_day) {
case 1:
cout << "Monday";
break;
case 2:
cout << "Tuesday";
break;
case 3:
cout << "Wednesday";
break;
case 4:
cout << "Thursday";
break;
case 5:
cout << "Friday";
break;
case 6:
cout << "Saturday";
break;
case 7:
cout << "Sunday";
break;
default:
cout << "Invalid input";
}
}
Producción :
Wednesday
la palabra clave romper
La palabra clave break
se usa con una instrucción switch
para omitir los casos restantes del cuerpo switch
después de que se cumple un case
dado.
En el ejemplo anterior, cuando la sentencia switch
se evalúa y cumple los criterios del caso 3
, se salta el bloque de código restante del cuerpo del switch
debido a la ruptura
; declaración.
la palabra clave predeterminada
La palabra clave default
se usa con la declaración switch
para ejecutar un bloque de código específico cuando ninguno de los casos se cumple en la declaración switch
dada.
Veamos el siguiente ejemplo, que demuestra el uso de la palabra clave default
en la instrucción switch
.
Código de ejemplo:
#include <iostream>
using namespace std;
int main() {
int a = 4;
switch (a) {
case 6:
cout << "Value of a is 6";
break;
case 7:
cout << "Value of a is 7";
break;
default:
cout << "The number is other than 6 or 7";
}
}
Producción :
The number is other than 6 or 7
En este ejemplo, hemos especificado el valor de la variable entera como 4, pero ninguno de los casos cumplirá la condición dada durante la ejecución. Por tanto, se ejecuta el bloque por defecto
.
Solucione el error Jump to case label
en la instrucción switch
en C++
Un error común que puede surgir al usar la instrucción switch
es el error Jump to case label
. El error ocurre cuando se hace una declaración dentro/bajo alguna etiqueta de caso
.
Veamos el siguiente ejemplo para entender el problema:
#include <iostream>
using namespace std;
int main() {
int a = 1;
switch (a) {
case 1:
int i = 66;
cout << i;
break;
case 2:
cout << i * 3;
break;
default:
cout << "Looking forward to the Weekend";
}
return 0;
}
En el ejemplo anterior, cuando inicializamos i=66
en caso 1:
y ejecutamos el código. El código genera un error Jump to case label
ya que el valor de i
es visible para los demás casos.
Un caso
es solo una etiqueta y, por lo tanto, no restringe el alcance del código escrito junto a él. Por lo tanto, si se ejecuta el caso 2
durante la ejecución, i
será una variable no inicializada.
Entonces, un lenguaje fuertemente tipado como C++ nunca permitirá que esto suceda. Por lo tanto, genera un error en tiempo de compilación.
Los delimitadores de alcance {}
dentro del caso 1
pueden superar este problema de alcance y ayudar a ejecutar el código sin errores.
#include <iostream>
using namespace std;
int main() {
int a = 1;
switch (a) {
case 1: {
int i = 66;
cout << i;
break;
}
case 2:
cout << "value does not exist";
break;
default:
cout << "Looking forward to the Weekend";
}
return 0;
}