Estructuras alternativas: switch
La instrucción switch permite seleccionar entre varias opciones de ejecución según el valor de una expresión entera o de tipo carácter (int, char). Es una estructura alternativa múltiple que simplifica la escritura cuando hay que tomar decisiones basadas en múltiples valores concretos.
La sintaxis general de esta instrucción es:
switch (expresión) {
case valor1:
// instrucciones para valor1
break; // rompe el switch (opcional pero recomendable)
case valor2:
// instrucciones para valor2
break;
// ...
default: // opción por defecto (opcional)
// instrucciones si ningún case coincide
}
- La expresión debe ser un valor entero o un carácter.
- Cada etiqueta
caseindica un valor concreto con el que se compara la expresión. - Cuando la expresión coincide con un
case, se ejecutan las instrucciones desde ese punto hasta que se encuentra unbreako termina el bloqueswitch. - La instrucción
breakes importante para evitar que se ejecuten loscasesiguientes. - El bloque
defaultes opcional y se ejecuta si ningúncasecoincide con el valor de la expresión.
Cuando se evalúa la expresión del switch:
- Se busca el primer
caseque coincida con el valor. - Se ejecutan todas las instrucciones desde ese
casehasta el primerbreakencontrado o hasta el final delswitch. - Si no hay ningún
caseque coincida y existedefault, se ejecutan sus instrucciones.
Veamos un ejemplo. El siguiente programa lee una nota numérica y muestra su clasificación en texto:
#include <iostream>
int main() {
int nota{};
std::cout << "Dime tu nota: ";
std::cin >> nota;
switch (nota) {
case 1:
case 2:
case 3:
case 4:
std::cout << "Suspenso";
break;
case 5:
std::cout << "Suficiente";
break;
case 6:
case 7:
std::cout << "Bien";
break;
case 8:
std::cout << "Notable";
break;
case 9:
case 10:
std::cout << "Sobresaliente";
break;
default:
std::cout << "Nota incorrecta";
break;
}
std::cout << std::endl << "Programa terminado" << std::endl;
return 0;
}
- Siempre incluye
breakal final de cadacasepara evitar ejecuciones no deseadas en los siguientes casos. - El
defaultes útil para capturar valores fuera de rango o no contemplados. - La expresión y los valores de
casedeben ser del mismo tipo (o compatibles). - Aunque el
switchsolo acepta tipos enteros ochar, para otros tipos comostringse usan estructuras condicionalesif-else.