Original article: If...Else Statement in C Explained
El flujo de código condicional es la capacidad de cambiar la forma en la que se comporta un fragmento de código en función en ciertas condiciones. En tales situaciones puedes usar las sentencias if
.
La sentencia if
también se conoce como una sentencia de toma de decisiones, ya que toma una decisión sobre la base de una condición o expresión dada. El bloque de código dentro de la instrucción if
que se ejecuta es la condición evaluada como true. Sin embargo, el código dentro de las llaves se omite si la condición es evalúa como false, y el código después de la sentencia if
es ejecutada.
Sintaxis de sentencia if
if (testCondition) {
// statements
}
Un ejemplo sencillo
Vamos a ver un ejemplo de esto en acción:
#include <stdio.h>
#include <stdbool.h>
int main(void) {
if(true) {
printf("Statement is True!\n");
}
return 0;
}
Salida:
Statement is True!
Si el código entre el paréntesis de la sentencia if
es true, todo dentro de las llaves es ejecutado. En este caso, true
evalúa a true, entonces el código ejecuta la función printf
.
Sentencias if..else
En una sentencia if...else
, si el código en el paréntesis de la sentencia if
es true, el código dentro de las llaves es ejecutado. Pero si la sentencia dentro del paréntesis es falso, todo el código dentro de las llaves de la sentencia else
es ejecutada en su lugar.
Claro, en el ejemplo anterior no fue muy útil en este caso porque true
siempre evalúa a verdadero. Aquí hay otro que es un poco más práctico:
#include <stdio.h>
int main(void) {
int n = 2;
if(n == 3) { // comparing n with 3
printf("Statement is True!\n");
}
else { // if the first condition is not true, come to this block of code
printf("Statement is False!\n");
}
return 0;
}
Salida:
Statement is False!
Hay algunas diferencias importantes aquí. En primer lugar, stdbool.h
no se ha sido incluido. Eso está bien porque true
y false
no se usan como en el primer ejemplo. En C, como en otros lenguajes de programación, puede usar sentencias que evalúan como verdadero o falso en lugar de usar los valores booleanos true
o false
directamente.
Observe también la condición en el paréntesis de la sentencia if
: n == 3
. Esta condición compara n
y el número 3. ==
es el operador comparación, y es una de varias operaciones de comparación C.
if...else
anidado
La sentencia if...else
permite elegir entre dos posibilidades. Pero algunas veces necesita elegir entre tres o más posibilidades.
Por ejemplo, el signo función en matemáticas devuelve -1 si es argumento es menor que cero, +1 si el argumento es mayor que cero, y devuelve cero si el argumento es cero.
El siguiente código implementa esta función:
if (x < 0)
sign = -1;
else
if (x == 0)
sign = 0;
else
sign = 1;
Como puede ver, una segunda sentencia if...else
es anidada dentro de la sentencia de la primera sentencia if..else
.
Si x
es menor que 0, entonces sign
se establece en -1. Sin embargo, si x
no es menor que 0, la segunda sentencia if...else
es ejecutada. Allí, si x
es igual a 0, sign
también se establece en 0. Pero si x
es mayor que 0, sign
en lugar de ser establece en 1.
En lugar en una sentencia if...else
anidada, los principiantes a menudo usan una cadena de sentencias if
:
if (x < 0) {
sign = -1;
}
if (x == 0) {
sign = 0;
}
if (x > 0) {
sign = 1;
}
Si bien esto funciona, no se recomienda, ya que no está claro que solo una de las instrucciones de asignación (sign = ...
) está destinada al ejecutarse dependiendo del valor de x
. También es ineficiente: cada vez que se ejecuta el código, se prueban la tras condiciones, incluso si una o dos no tienen que serlo.
Sentencia else...if
Sentencias if...else
son una alternativa a una cadena de sentencias if
. Considere lo siguiente:
#include <stdio.h>
int main(void) {
int n = 5;
if(n == 5) {
printf("n is equal to 5!\n");
}
else if (n > 5) {
printf("n is greater than 5!\n");
}
return 0;
}
Salida:
n is equal to 5!
Si la condición de la sentencia if
se evalúa a false, la condición para la sentencia else...if
es revisada. Si la condición evalúa a true, el código dentro de las llaves de la sentencia else...if
se ejecuta.
Operadores de comparación
OPERATOR NAME | USAGE | RESULT |
---|---|---|
Equal To | a == b | True if a is equal to b , false otherwise |
Not Equal To | a != b | True if a is not equal to b , false otherwise |
Greater Than | a > b | True if a is greater than b , false otherwise |
Greater Than or Equal To | a >= b | True if a is greater than or equal to b , false otherwise |
Less Than | a < b | True if a is less than b , false otherwise |
Less Than or Equal To | a <= b | True if a is less than or equal to b , false otherwise |
Operadores Lógicos
Es posible que deseemos ejecutar un poco de código si algo no es cierto, o si dos cosas son verdaderas. Para eso tenemos operadores lógicos:
OPERATOR NAME | USAGE | RESULT |
---|---|---|
Not (! ) | !(a == 3) | True if a is not equal to 3 |
And (&& ) | a == 3 && b == 6 | True if a is equal to 3 and b is equal to 6 |
Or (|| ) | a == 2 || b == 4 | True if a is equal to 2 or b is equal to 4 |
Por ejemplo:
#include <stdio.h>
int main(void) {
int n = 5;
int m = 10;
if(n > m || n == 15) {
printf("Either n is greater than m, or n is equal to 15\n");
}
else if( n == 5 && m == 10 ) {
printf("n is equal to 5 and m is equal to 10!\n");
}
else if ( !(n == 6)) {
printf("It is not true that n is equal to 6!\n");
}
else if (n > 5) {
printf("n is greater than 5!\n");
}
return 0;
}
Salida:
n is equal to 5 and m is equal to 10!
Una nota importante sobre las comparaciones C
Como lo mencionamos con anterioridad que cada comparación verifica si algo es verdadero o falso, pero eso solo es una verdad a medias. C es muy ligero y cercano al hardware en el que se está ejecutando. Con el hardware es fácil comprobar si algo es 0 o falso, pero cualquier otra cosa es mucho más difícil.
En cambio, mucho más preciso decir que las comparaciones realmente están comprobando si algo es 0/ falso, o si es cualquier otro valor.
Por ejemplo, esta sentencia if es verdadera y válida:
if(12452) {
printf("This is true!\n")
}
Por diseño, 0 es falso, y por convención, 1 es verdadero. De hecho, aquí hay un vistazo a la biblioteca stdbool.h
:
#define false 0
#define true 1
Si bien hay un poco más, este es el núcleo de cómo funcionan los booleanos y cómo funciona la biblioteca. Estas dos líneas indican al compilador que reemplace la palabra false con 0 y true con 1.