Condicionales en C++#
if / else if / else#
La condición entre paréntesis se evalúa a un booleano, normalmente una
comparación (a > b, x == y…). Si es verdadera se ejecuta
su bloque y se salta el resto; sólo se comprueba el siguiente else if cuando
todas las condiciones anteriores han fallado. Por eso el orden importa: la primera
que se cumpla "gana".
if (a > b) {
cout << "a es mayor\n";
} else if (a < b) { // sólo se comprueba si `a > b` fue falso
cout << "b es mayor\n";
} else { // ni mayor ni menor => iguales
cout << "son iguales\n";
}
Con una sola instrucción puedes omitir las llaves, pero ponerlas siempre evita errores al añadir líneas después.
Combinar condiciones#
&& (y), || (o), ! (no). Se evalúan con cortocircuito: en A && B, si A
es falso B ni se mira; en A || B, si A es verdadero B tampoco. Esto sirve
para proteger comprobaciones peligrosas:
Para comprobar un rango hay que escribir las dos comparaciones:
C++ no encadena comparaciones
0 <= x < n compila pero no hace lo que crees: evalúa (0 <= x), que da
0 o 1, y luego compara ese 0/1 < n. Casi siempre es verdadero. Usa
siempre 0 <= x && x < n.
Operador ternario#
Elige entre dos valores en una sola expresión (no dos bloques de código):
Útil dentro de una expresión (una asignación, un cout, un argumento). Para lógica
más larga, un if normal se lee mejor.
switch — elegir según un valor#
Compara una variable entera (o char/enum) contra varias constantes. Cada
case necesita break; si falta, la ejecución "cae" al siguiente case, lo que a
veces se aprovecha para agrupar casos:
switch (opcion) {
case 1:
cout << "uno\n";
break; // sin break seguiría en el case 2
case 2:
case 3: // 2 y 3 comparten cuerpo (case 2 cae en el 3)
cout << "dos o tres\n";
break;
default: // ninguno de los anteriores
cout << "otra\n";
}
No admite rangos, float ni string; para eso usa if / else if.
Veracidad de un valor#
En una condición, un número o puntero es falso si vale 0/nullptr y verdadero
en cualquier otro caso. Así puedes escribir directamente:
Los contenedores (vector, string, …) no se convierten a booleano: usa
v.empty() para saber si están vacíos.
Errores frecuentes#
=vs==.if (a = b)asignabaay usa ese valor como condición;if (a == b)compara. Compila casi siempre, así que activa avisos (-Wall).- Comparar
doublecon==. El redondeo hace que0.1 + 0.2 == 0.3sea falso. Compara con una tolerancia:if (abs(x - y) < 1e-9) { ... }. -
elsecolgante. Sin llaves, unelsese asocia alifmás cercano, no al que la indentación sugiere:if (a > 0) if (b > 0) cout << "ambos positivos\n"; else cout << "??\n"; // este else pertenece al `if (b > 0)`Pon llaves y la ambigüedad desaparece.
Ejemplo completo#
Muestra el mayor de dos números:
/**
* Conditionals demo — print the larger of two numbers.
*
* Shows `if` / `else`: choosing what to do based on a condition.
*
* Input: two integers a and b (separated by whitespace).
* Output: the larger of the two (or either one when they are equal).
*/
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
// Compare with `>`; the branch that runs is decided at run time.
// (`a >= b` would also be correct here: on a tie we may print either one.)
if (a > b) {
cout << a << "\n";
} else {
cout << b << "\n";
}
return 0;
}
| Entrada | Salida |
|---|---|
3 7 |
7 |
10 2 |
10 |