If anidados en C: crear menús paso a paso
Clase 4 de 13 • Curso de Control de Flujo en C
Contenido del curso
Toma de decisiones
Control de Bucles en C
Uso de las instrucciones break y continue
Cierre
Aprende a dominar los if anidados en C con un ejemplo claro: crear menús y submenús que reaccionan según la opción del usuario. Verás cómo estructurar el boilerplate, aplicar indentación correcta, usar el operador de comparación (==) y evitar errores típicos de llaves y retorno. Todo con un tono práctico y directo.
¿Qué son los if anidados en C y cuándo usarlos?
Los if anidados son decisiones dentro de decisiones. En C, permiten construir flujos como submenús: primero eliges una categoría (bebidas, comidas o postres) y luego una opción específica. Esta técnica es útil para sistemas de menús y para crear lógicas que se ramifican paso a paso.
- Funcionan con bloques de código dentro de otros bloques.
- Se combinan con else if y else para cubrir todos los casos.
- Requieren indentación consistente para mantener legibilidad.
- El estilo de llaves puede variar por preferencia, pero la indentación no.
- C es un lenguaje lanzado en 1972 y aún vigente, ideal para aprender bases sólidas.
¿Cómo preparar el boilerplate y las condiciones?
Primero, arma la plantilla mínima: función main, llaves y variables. Aquí se “falsean” las entradas: no hay inputs del usuario todavía, así que se asignan valores a las opciones al inicio.
- Usa comentarios para describir el algoritmo: genera menús según la elección del usuario.
- Declara variables enteras para las opciones del menú.
- Aplica el operador de comparación (==) en los if.
- Cuida el bloque de main y su return 0.
¿Cómo escribir el menú principal y anidar if?
Ejemplo simplificado del flujo mostrado: si la opción 0 es bebidas, se imprime un submenú y se decide con un segundo if.
#include <stdio.h> int main() { // Este programa genera menús según lo que el usuario elija. int option_one = 0; // 0: bebidas, 1: comidas, 2: postres int option_two = 2; // 0: Platicola Cero, 1: Platicola Normal, 2: Platicpiña Colada if (option_one == 0) { printf("Usted eligio la opcion 0, vera nuestro menu de bebidas. Elija una.\n"); printf("0: Platicola Cero\n"); printf("1: Platicola Normal\n"); printf("2: Platicpina Colada\n"); if (option_two == 0) { printf("Usted eligio una Platicola cero. Mmm, rico.\n"); } else if (option_two == 1) { printf("Usted eligio una Platicola con mucha azucar. Azucar!\n"); } else if (option_two == 2) { printf("Usted eligio una Plaxipina colada.\n"); } else { printf("Opcion invalida.\n"); } } else if (option_one == 1) { // Aqui va el menu de alimentos. } else if (option_one == 2) { // Aqui va el menu de postres. } else { printf("Opcion invalida.\n"); } return 0; }
- Observa la anidación: el segundo if depende de que option_one sea 0.
- Usa saltos de línea con
\npara imprimir el menú de forma legible.
¿Cómo imprimir opciones y mantener legibilidad?
- Imprime un mensaje de bienvenida y explica qué hace cada número.
- Ordena el contenido: primero el menú principal, luego el submenú.
- Repite la estructura con else if para las demás categorías.
¿Qué errores evitar y qué buenas prácticas seguir?
En el ejemplo se muestran fallos comunes y cómo corregirlos. Mantén un flujo claro y separa cada bloque.
- Respeta la indentación a un nivel dentro de cada bloque.
- Verifica el cierre de llaves: cada if/else if/else debe cerrar correctamente.
- No olvides el return 0; al final de main.
- No confíes ciegamente en el autocomplete: puede insertar llaves innecesarias.
- Si algo “se anidó” por error, revisa dónde abren y cierran las llaves.
- Puedes compilar y ejecutar desde tu entorno con la tecla configurada (ejemplo: F6).
- Mientras no uses inputs, asigna las opciones arriba para probar rápidamente.
¿Te animas al reto? Completa las ramas para comidas y postres replicando la misma estructura con else if, imprime sus submenús y maneja bien las opciones inválidas con un else final.
Comparte tu versión del menú en los comentarios: qué categorías agregaste, cómo organizaste las opciones y qué mensaje de error usaste.