Switch
Bienvenido a la sección de switch en C++, donde aprenderás a usar esta estructura de control para tomar decisiones basadas en diferentes valores.
En el tema anterior hablamos de los condicionales, y vimos que podemos usarlos para tomar decisiones basadas en diferentes valores incluyendo n cantidad de condicionales usando else if. Esto a primera vista es una solución válida, pero puede volverse poco legible si tenemos muchos valores diferentes.
Vamos a tomar de referencia el objeto Birthright
el cuál tiene un efecto diferente dependiendo
del personaje con el que estemos jugando.
Usando condicionales, nuestro código luciría de la siguiente manera:
1#include <iostream>23using namespace std;45int main() {6string character = 1;78// Consideremos el siguiente menú9// 1. Isaac10// 2. Magdalene11// 3. Cain12// 4. Judas13// 5. Blue Baby14// 6. Eve1516if (character == 1) {17// Efecto de Isaac18} else if (character == 2) {19// Efecto de Magdalene20} else if (character == 3) {21// Efecto de Cain22} else if (character == 4) {23// Efecto de Judas24} else if (character == 5) {25// Efecto de Blue Baby26} else if (character == 6) {27// Efecto de Eve28} else if ... {29// Resto de efectos de los 34 personajes30}3132return 0;33}
Como puedes notar esto es una tarea muy repetitiva que puede salirse de las manos muy fácilmente, es por eso que con switch podemos simplificar este código.
1#include <iostream>23using namespace std;45int main() {6string character = 1;78// Consideremos el siguiente menú9// 1. Isaac10// 2. Magdalene11// 3. Cain12// 4. Judas13// 5. Blue Baby14// 6. Eve1516switch (character) {17case 1:18// Efecto de Isaac19break;20case 2:21// Efecto de Magdalene22break;23case 3:24// Efecto de Cain25break;26case 4:27// Efecto de Judas28break;29case 5:30// Efecto de Blue Baby31break;32case 6:33// Efecto de Eve34break;35default:36// En caso de no existir, realiza esto37break;38}3940return 0;41}
Ahora nuestro código luce más legible sin tantos if-else, vamos con la explicación de cada parte del switch.
La sintaxis del switch se compone de las siguientes partes:
switch (parámetro): Indica el inicio del switch junto con el valor a evaluar.
case: Indica el inicio de un caso.
default: Indica el caso por defecto al no coincidir con ningún caso.
break: Indica el fin de un caso.
Cuando el parámetro coincide con un caso, se ejecuta el código correspondiente a ese caso y la instrucción break le dice al programa que se ha terminado el proceso del switch y lo finaliza.
NOTA
Si olvidamos colocar el break en un caso, el programa continuará ejecutando el siguiente caso hasta encontrar un break o terminar el switch, esto se conoce como fallthrough. Acá te dejo un ejemplo:
1#include <iostream>23using namespace std;45int main() {6int pickup = 2;78// Consideremos el siguiente menú9// 1. Bomba10// 2. Llave11// 3. Moneda1213switch (pickup) {14case 1:15cout << "Tomaste 1 Bomba" << endl;16break;17case 2:18cout << "Tomaste 1 Llave" << endl;19case 3:20cout << "Tomaste 1 Moneda" << endl;21break;22default:23// No tomar nada24break;25}2627return 0;28}
En este ejemplo, al seleccionar la opción 2 (Llave), se mostrará "Tomaste 1 Llave" y "Tomaste 1 Moneda" porque no hay un break después del case 2.
Otra de las características del switch es que podemos aplicar el mismo código para múltiples casos:
1#include <iostream>23using namespace std;45int main() {6int enemy = 2;78// Consideremos el siguiente menú9// 1. Monstro10// 2. The Bloat11// 3. The Fallen1213switch (enemy) {14case 1:15case 2:16case 3:17cout << "Skill Issue!" << endl;18break;19default:20// No hacer nada21break;22}2324return 0;25}
No importa si el enemigo es 1, 2 o 3, ¡Todos son skill issues!
NOTA
Los valores que puedes utilizar en un switch deben ser enteros (int) o caracteres (char). No puedes usar variables o expresiones complejas. En algunos puedes llegar a ver booleanos, pero realmente no tiene mucho sentido y aunque se pueda, para un booleano es más común simplemente ver un if else.
Sala de desafío #3
Azazel nos acompaña en la sala de desafío de hoy, ¡Espero estés preparado!




3.5
0.5Desarrolla un programa en C++ que:
Considerando el siguiente menú:
1: Monstro
250 HP
2: The Bloat
450 HP
3: The Matriarch
700 HP
Solicite al usuario ingresar la cantidad de objetos tomados hasta el momento.
Por cada objeto tomado, el daño de Azazel se multiplicará por 10, es decir:
Daño Final = (Objetos * 10) * 3.5
Solicite al usuario ingresar el número del jefe que desea enfrentar y muestra el mensaje:
Azazel vs [Nombre del Jefe].
Muestra el daño final de Azazel.
Si Azazel logra derrotar al jefe muestra un mensaje de victoria.
Si no, muestra el siguiente mensaje:
DEAR DIARY, TODAY I DIED, I was killed by this thing! [Nombre del Jefe].
¡Esperemos que no tengas un Skill Issue con este desafío! Etiquetame si sobreviviste.
