En la programación en C, el flujo de ejecución de un programa se puede alterar mediante estructuras condicionales. Estas permiten que el código tome decisiones basadas en criterios específicos.
1. La sentencia if
Es la forma más básica de control. Ejecuta un bloque de código únicamente si una condición evaluada resulta ser verdadera.
if (condicion)
{
// Código que se ejecuta si la condición es verdadera
}
En el lenguaje C, cualquier valor distinto de cero se considera verdadero, mientras que el cero representa la falsedad. Observemos el siguiente ejemplo relacionado con la temperatura:
#include <stdio.h>
int main()
{
int temperatura = 32;
if (temperatura > 30)
{
printf("Hace mucho calor exterior.\n");
}
return 0;
}
2. Uso de else para alternativas
Cuando necesitamos realizar una acción distinta en caso de que la condición no se cumpla, recurrimos a la cláusula else. Esta no puede existir de forma independiente; siempre debe estar vinculada a un if previo.
#include <stdio.h>
int main()
{
int edad_usuario = 16;
if (edad_usuario >= 18)
{
printf("Acceso concedido: Eres mayor de edad.\n");
}
else
{
printf("Acceso denegado: Eres menor de edad.\n");
}
return 0;
}
3. Decisiones múltiples con else if
Para escenarios con más de dos posibilidades, se utiliza la estructura else if. El programa evalúa las condiciones en orden secuenical hasta encontrar una verdadera.
#include <stdio.h>
int main()
{
int nivel_bateria = 15;
if (nivel_bateria > 80)
{
printf("Batería llena.\n");
}
else if (nivel_bateria > 20)
{
printf("Batería suficiente.\n");
}
else
{
printf("Por favor, conecte el cargador.\n");
}
return 0;
}
4. Condicionales anidados
Es posible colocar una sentencia if dentro de otra. Esto es útil para validar jerarquías de condiciones.
#include <stdio.h>
int main()
{
int tiene_cuenta = 1;
int saldo_disponible = 500;
if (tiene_cuenta == 1)
{
if (saldo_disponible > 100)
{
printf("Transacción autorizada.\n");
}
}
return 0;
}
5. Errores comunes en la sintaxis
- Confusión entre asignación y comparación: Usar
=(asignación) en lugar de==(comparación) dentro del paréntesis. - Punto y coma mal ubicado: Escribir
if (condicion);anula el efecto de la condición sobre el bloque siguiente. - Ausencia de llaves: Aunque un
ifsin llaves afecta a la primera línea siguiente, es una buena práctica usarlas siempre para evitar errores de lógica, especialmente en el "else colgado" (dangling else).
6. Operador Ternario
El operador condicional ? : es una forma compacta de representar un if-else simple. Requiere tres operandos.
Sintaxis: condicion ? expresion_si_verdadero : expresion_si_falso;
#include <stdio.h>
int main()
{
int x = 45, y = 90;
int mayor = (x > y) ? x : y;
printf("El valor más alto es: %d\n", mayor);
return 0;
}
7. Evaluación de Cortocircuito
Los operadores lógicos && (AND) y || (OR) optimizan la ejecución:
- Cortocircuito en &&: Si la primera parte es falsa, la segunda no se evalúa porque el resultado final ya es falso.
- Cortocircuito en ||: Si la primera parte es verdadera, la segunda se omite porque el resultado ya es verdadero.
#include <stdio.h>
int main()
{
int a = 0;
int contador = 5;
// Como 'a' es 0, la segunda parte no incrementa el contador
if (a != 0 && ++contador > 0)
{
printf("Esto no se imprimirá.\n");
}
printf("Contador: %d\n", contador); // Sigue siendo 5
return 0;
}
8. La estructura switch
Se utiliza para realizar múltiples bifurcaciones basadas en el valor de una expresión entera o de carácter. Es más limpia que múltiples else if cuando se comparan valores constantes.
#include <stdio.h>
int main()
{
char comando = 'B';
switch (comando)
{
case 'A':
printf("Ejecutando acción A\n");
break;
case 'B':
printf("Ejecutando acción B\n");
break;
default:
printf("Comando desconocido\n");
}
return 0;
}
Reglas del switch:
- La expresión debee resultar en un tipo entero o char.
- Cada
caserequiere una constante única. - El uso de
breakes fundamental; de lo contrario, el programa continuará ejecutando los casos siguientes (comportamiento conocido como fall-through). defaultactúa como el caso base si ninguna etiqueta coincide.