Control de flujo condicional en C

Capítulo 5

Tiempo estimado de lectura: 4 minutos

+ Ejercicio

Verdadero y falso en C: la regla del cero

En C, una condición no necesita ser “booleana” en el sentido estricto: cualquier expresión entera se interpreta así:

  • 0 se considera falso
  • cualquier valor distinto de 0 se considera verdadero

Esto aplica a resultados de comparaciones (que producen 0 o 1) y también a expresiones numéricas comunes.

int x = 5; if (x) { /* se ejecuta: x es distinto de 0 */ } if (x - 5) { /* NO se ejecuta: x-5 es 0 */ }

if / else: decisiones básicas

La estructura if ejecuta un bloque si la condición es verdadera. Con else defines el camino alternativo.

if (condicion) { /* camino A */ } else { /* camino B */ }

Guía práctica: escribir un if/else sin errores

  • 1) Escribe la condición como una comparación clara (por ejemplo, edad >= 18).
  • 2) Usa llaves {} incluso si hay una sola instrucción (reduce errores al editar).
  • 3) Revisa que no estés usando = donde debería ir ==.

Asignación (=) vs comparación (==): el error clásico

= asigna un valor. == compara dos valores. Confundirlos cambia el flujo del programa.

int a = 3; if (a = 0) { /* a se vuelve 0, condición falsa, NO entra */ } if (a == 0) { /* compara, entra si a es 0 */ }

El primer if es un bug típico: la asignación a = 0 produce el valor 0, y como 0 es falso, el bloque no se ejecuta. Además, a queda modificado.

Continúa en nuestra aplicación.
  • Escuche el audio con la pantalla apagada.
  • Obtenga un certificado al finalizar.
  • ¡Más de 5000 cursos para que explores!
O continúa leyendo más abajo...
Download App

Descargar la aplicación

Patrón recomendado: activa advertencias del compilador y escribe condiciones que “se lean” como comparaciones. En C moderno, también puedes forzar claridad con paréntesis:

if ((a == 0)) { /* intencional */ }

else if: múltiples caminos

Cuando hay más de dos opciones, encadena condiciones con else if. Se evalúan en orden: el primer bloque cuya condición sea verdadera se ejecuta y el resto se omite.

int nota = 76; if (nota >= 90) { /* A */ } else if (nota >= 80) { /* B */ } else if (nota >= 70) { /* C */ } else { /* D */ }

Lectura de código: identifica el camino de ejecución

Para nota = 76:

  • nota >= 90 → falso
  • nota >= 80 → falso
  • nota >= 70 → verdadero → se ejecuta el bloque C
  • El else ya no se evalúa

Comparaciones correctas con rangos

En C no puedes escribir rangos como en matemáticas: 0 <= x <= 10 no significa lo que parece.

El error: encadenar comparaciones

int x = 20; if (0 <= x <= 10) { /* ¿entra? */ }

Esto se evalúa en dos pasos: primero 0 <= x produce 0 o 1; luego ese resultado se compara con 10. Si x es 20, 0 <= x da 1, y 1 <= 10 es verdadero. Resultado: entra cuando no debería.

La forma correcta: usar operadores lógicos

if (x >= 0 && x <= 10) { /* x está en [0,10] */ }

Para rangos excluyentes:

if (x > 0 && x < 10) { /* x está en (0,10) */ }

Operadores lógicos y cortocircuito (short-circuit)

Los operadores lógicos más usados en condiciones son:

  • && (AND): verdadero si ambas expresiones son verdaderas
  • || (OR): verdadero si al menos una es verdadera
  • ! (NOT): invierte verdadero/falso

En C, && y || tienen cortocircuito: si el resultado ya se puede determinar, la segunda parte no se evalúa.

Ejemplo: evitar accesos inválidos

int i = -1; int arr[3] = {10, 20, 30}; if (i >= 0 && i < 3 && arr[i] == 20) { /* seguro */ }

Si i es -1, la primera condición i >= 0 es falsa, así que el resto no se evalúa y no hay acceso fuera de rango.

Lectura de código: orden de evaluación

Para i = 2:

  • i >= 0 → verdadero, continúa
  • i < 3 → verdadero, continúa
  • arr[i] == 20arr[2] es 30 → falso
  • Resultado final: falso

Ojo: & y | no son lo mismo que && y ||

& y | son operadores bit a bit y no hacen cortocircuito. En condiciones, usa && y || salvo que realmente necesites operaciones a nivel de bits.

Operador ternario ?: (decisión en una expresión)

El operador ternario permite elegir entre dos valores según una condición. Es útil para asignaciones o para construir expresiones, pero conviene mantenerlo simple para no perder legibilidad.

resultado = (condicion) ? valor_si_verdadero : valor_si_falso;

Ejemplos prácticos

int edad = 17; const char *tipo = (edad >= 18) ? 

Ahora responde el ejercicio sobre el contenido:

¿Cuál es la forma correcta de comprobar en C que una variable x está dentro del rango inclusivo de 0 a 10?

¡Tienes razón! Felicitaciones, ahora pasa a la página siguiente.

¡Tú error! Inténtalo de nuevo.

En C no se deben encadenar comparaciones como 0 <= x <= 10, porque se evalúan en dos pasos y puede dar verdadero incorrectamente. Para un rango inclusivo se combinan dos comparaciones con &&: x >= 0 && x <= 10.

Siguiente capítulo

Bucles y control de iteración en C

Arrow Right Icon
Descarga la aplicación para obtener una certificación gratuita y escuchar cursos en segundo plano, incluso con la pantalla apagada.
  • ¡Lee este curso en la aplicación para obtener tu Certificado Digital!
  • Escucha este curso en la aplicación sin tener que encender la pantalla de tu celular;
  • Obtenga acceso 100% gratuito a más de 4000 cursos en línea, libros electrónicos y audiolibros;
  • + Cientos de ejercicios + Historias educativas.