Saltar a la etiqueta del caso en la declaración del interruptor

Abdul Basit 12 octubre 2023
  1. la instrucción switch en C++
  2. Solucione el error Jump to case label en la instrucción switch en C++
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 valor switch.
  • Después de evaluar la expresión switch con una declaración case, el bloque de código posterior al case coincidente se ejecuta si la condición es verdadera.
  • Las palabras clave break y default son opcionales con la instrucción switch. 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;
}

Artículo relacionado - C++ Error