certmundo.
es‑mx

6 min de lectura

¿Cómo controlar el flujo de un programa con if y switch en C++?

Controlar el flujo de un programa significa decirle al código qué hacer según cada situación, usando estructuras como if y switch.

Cuando el programa necesita decidir

Imagina que trabajas en el área de sistemas de Liverpool. Tienes que escribir un programa que calcule el descuento de un cliente según su nivel de membresía. Un cliente básico recibe 5%. Un cliente premium recibe 15%. Si el programa no puede distinguir entre los dos, siempre aplica el mismo descuento. Eso es un error que cuesta dinero.

Aquí entran las estructuras condicionales. Son las herramientas que le permiten a tu programa tomar decisiones. Sin ellas, el código siempre hace lo mismo, sin importar la situación.

El sistema DECIDE: cómo pensar las condiciones

Antes de escribir código, usa el sistema DECIDE para organizar tu lógica:

  • Define la pregunta: ¿qué debe evaluar el programa?
  • Establece las opciones: ¿cuáles son los posibles casos?
  • Conecta cada caso con una acción específica.
  • Identifica si los casos son exclusivos o pueden combinarse.
  • Decide qué estructura usar: if o switch.
  • Escribe el código limpio y pruébalo.

Este sistema te evita escribir condicionales desordenadas que son difíciles de leer y mantener.

La estructura if: la decisión más básica

El if evalúa una condición. Si es verdadera, ejecuta un bloque de código. Si es falsa, lo salta.

Así se ve la sintaxis:

if (condicion) {
    // código si la condición es verdadera
}

Puedes agregar un else para manejar el caso contrario:

if (condicion) {
    // verdadero
} else {
    // falso
}

Y si tienes más de dos casos, usas else if:

if (condicion1) {
    // caso 1
} else if (condicion2) {
    // caso 2
} else {
    // cualquier otro caso
}

Ejemplo real: descuentos en Liverpool

Supón que escribes un programa para aplicar descuentos según el nivel de cliente:

#include <iostream>
using namespace std;

int main() {
    int nivel;
    double precio = 1500.0;
    double precioFinal;

    cout << "Ingresa tu nivel (1=Basico, 2=Silver, 3=Premium): ";
    cin >> nivel;

    if (nivel == 1) {
        precioFinal = precio * 0.95; // 5% de descuento
    } else if (nivel == 2) {
        precioFinal = precio * 0.88; // 12% de descuento
    } else if (nivel == 3) {
        precioFinal = precio * 0.80; // 20% de descuento
    } else {
        precioFinal = precio;
        cout << "Nivel no reconocido. Sin descuento." << endl;
    }

    cout << "Precio final: $" << precioFinal << endl;
    return 0;
}

Si el usuario escribe 3, el programa muestra:

Precio final: $1,200

Nota cómo cada else if cubre un caso distinto. El else al final actúa como red de seguridad.

Condiciones combinadas con operadores lógicos

Recuerdas los operadores lógicos de la lección anterior. Aquí los usas directo en el if.

Ejemplo: un empleado de FEMSA recibe bono si lleva más de 2 años en la empresa Y su evaluación es mayor a 80:

int anios = 3;
int evaluacion = 85;

if (anios > 2 && evaluacion > 80) {
    cout << "El empleado recibe bono." << endl;
} else {
    cout << "El empleado no califica para bono." << endl;
}

Salida:

El empleado recibe bono.

Si cambias anios a 1, la condición falla y el programa muestra el mensaje alternativo. Así de directo.

La estructura switch: cuando hay muchos casos fijos

El switch es ideal cuando evalúas una sola variable contra varios valores concretos. Es más legible que escribir diez else if seguidos.

Su sintaxis:

switch (variable) {
    case valor1:
        // código
        break;
    case valor2:
        // código
        break;
    default:
        // código si no hay coincidencia
        break;
}

El break es obligatorio. Sin él, el programa sigue ejecutando los casos siguientes aunque no coincidan. Ese error se llama "fall-through" y es muy común en principiantes.

Ejemplo real: menú de productos de Bimbo

Imagina un sistema de pedidos internos en Bimbo. El empleado elige una categoría de producto con un número:

#include <iostream>
using namespace std;

int main() {
    int categoria;

    cout << "Elige categoria de producto:" << endl;
    cout << "1 - Pan de caja" << endl;
    cout << "2 - Pastelitos" << endl;
    cout << "3 - Tortillas" << endl;
    cout << "4 - Donas" << endl;
    cin >> categoria;

    switch (categoria) {
        case 1:
            cout << "Seleccionaste: Pan de caja" << endl;
            break;
        case 2:
            cout << "Seleccionaste: Pastelitos" << endl;
            break;
        case 3:
            cout << "Seleccionaste: Tortillas" << endl;
            break;
        case 4:
            cout << "Seleccionaste: Donas" << endl;
            break;
        default:
            cout << "Categoria no valida." << endl;
            break;
    }

    return 0;
}

Si el usuario escribe 2, el programa muestra:

Seleccionaste: Pastelitos

El default maneja cualquier número que no esté en la lista. Siempre inclúyelo.

¿Cuándo usar if y cuándo usar switch?

Situación Usa esto
Comparas rangos (> 100, < 50) if / else if
Combinas condiciones con && o || if / else if
Tienes muchos valores exactos y fijos switch
El código se lee más claro con lista de opciones switch
Solo tienes dos casos if / else

Usa switch cuando las opciones son como un menú. Usa if cuando las condiciones son más complejas o involucran rangos.

Errores comunes al usar condicionales

Error 1: usar = en lugar de ==

Este es el error más frecuente. Recuerda de la lección anterior: = asigna, == compara.

// MAL: esto siempre es verdadero y sobreescribe la variable
if (nivel = 3) { ... }

// BIEN: esto compara correctamente
if (nivel == 3) { ... }

Error 2: olvidar el break en switch

Sin break, el programa ejecuta todos los casos que vienen después:

switch (categoria) {
    case 1:
        cout << "Pan de caja" << endl;
        // falta break aqui!
    case 2:
        cout << "Pastelitos" << endl; // esto tambien se ejecuta si categoria == 1
        break;
}

Siempre pon break al final de cada case.

Error 3: no manejar el caso else o default

Si el usuario ingresa un valor inesperado y no tienes else ni default, el programa no hace nada. Peor aún, puede continuar con variables sin valor correcto.

Error 4: condiciones imposibles

int edad = 25;
if (edad > 18 && edad < 18) { // esto NUNCA es verdadero
    cout << "Imposible" << endl;
}

Revisa tus condiciones lógicas antes de compilar. Una condición que nunca se cumple es código muerto.

Cómo aplicar esto en tu próximo programa

Sigue estos pasos cada vez que necesites una condicional:

  1. Identifica qué variable estás evaluando.
  2. Lista todos los casos posibles en papel o en comentarios.
  3. Decide si usas if o switch según la tabla de arriba.
  4. Escribe siempre el caso else o default aunque creas que no se necesita.
  5. Prueba el programa con cada valor posible, incluyendo datos raros o incorrectos.

Por ejemplo, si construyes un simulador de nómina para una empresa mediana, prueba con salarios de $0, $10,000, $50,000 y valores negativos. El programa debe responder correctamente en todos los casos.

Combinar if y switch en un mismo programa

No tienes que elegir solo uno. Puedes usarlos juntos cuando la lógica lo requiere.

Supón un sistema de recursos humanos en Mercado Libre. Primero validas si el empleado está activo con un if. Luego usas switch para determinar su área:

bool activo = true;
int area = 2;

if (activo) {
    switch (area) {
        case 1:
            cout << "Area: Logistica" << endl;
            break;
        case 2:
            cout << "Area: Tecnologia" << endl;
            break;
        case 3:
            cout << "Area: Ventas" << endl;
            break;
        default:
            cout << "Area no registrada" << endl;
            break;
    }
} else {
    cout << "Empleado inactivo. Sin acceso al sistema." << endl;
}

Este patrón es muy común en aplicaciones reales. El if externo actúa como guardia. El switch interno maneja la lógica de negocio.

Un programa que no puede decidir solo genera problemas para todos los usuarios.

Puntos clave

  • El `if` evalúa condiciones con rangos o lógica combinada; el `switch` es ideal para listas de valores exactos y fijos como menús o categorías.
  • Siempre incluye `else` en tus `if` y `default` en tus `switch`. Manejar casos inesperados evita errores silenciosos en producción.
  • El `break` al final de cada `case` es obligatorio en `switch`. Sin él, el programa ejecuta los casos siguientes aunque no coincidan con la variable.
  • Confundir `=` (asignación) con `==` (comparación) dentro de un `if` es uno de los errores más comunes y difíciles de detectar en C++.
  • Puedes combinar `if` y `switch` en el mismo programa. Usa el `if` como guardia y el `switch` para manejar múltiples opciones dentro de una condición válida.

Comparte esta lección: