El flujo de código condicional es la capacidad de cambiar la forma en que se comporta un fragmento de código en función de ciertas condiciones. En tales situaciones, puede utilizar if
declaraciones.
La if
declaración también se conoce como declaración de toma de decisiones, ya que toma una decisión sobre la base de una condición o expresión determinada. El bloque de código dentro de la if
declaración se ejecuta y la condición se evalúa como verdadera. Sin embargo, el código dentro de las llaves se omite si la condición se evalúa como falsa y if
se ejecuta el código después de la declaración.
Sintaxis de una if
declaración
if (testCondition) { // statements }
Un simple ejemplo
Veamos un ejemplo de esto en acción:
#include #include int main(void) { if(true) { printf("Statement is True!\n"); } return 0; }
Salida:
Statement is True!
Si el código entre paréntesis de la if
declaración es verdadero, se ejecuta todo lo que está entre las llaves. En este caso, se true
evalúa como verdadero, por lo que el código ejecuta la printf
función.
if..else
declaraciones
En una if...else
declaración, si el código entre paréntesis de la if
declaración es verdadero, se ejecuta el código entre paréntesis. Pero si la declaración dentro del paréntesis es falsa, todo el código dentro de los else
corchetes de la declaración se ejecuta en su lugar.
Por supuesto, el ejemplo anterior no es muy útil en este caso porque true
siempre se evalúa como verdadero. Aquí hay otro que es un poco más práctico:
#include 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!
Aquí hay algunas diferencias importantes. Primero, stdbool.h
no se ha incluido. Eso está bien porque true
y false
no se están usando como en el primer ejemplo. En C, como en otros lenguajes de programación, puede usar declaraciones que evalúen 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 if
declaración: n == 3
. Esta condición compara n
y el número 3. ==
es el operador de comparación, y es una de varias operaciones de comparación en C.
Anidado if...else
La if...else
declaración permite elegir entre dos posibilidades. Pero a veces es necesario elegir entre tres o más posibilidades.
Por ejemplo, la función de signo en matemáticas devuelve -1 si el 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 if...else
declaración está anidada dentro de la else
declaración de la primera if..else
.
Si x
es menor que 0, entonces sign
se establece en -1. Sin embargo, si x
no es menor que 0, if...else
se ejecuta la segunda instrucción. Allí, si x
es igual a 0, sign
también se establece en 0. Pero si x
es mayor que 0, en sign
cambio , se establece en 1.
En lugar de una if...else
declaración anidada , los principiantes suelen utilizar una serie de if
declaraciones:
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 a ejecutarse según el valor de x
. También es ineficiente: cada vez que se ejecuta el código, se prueban las tres condiciones, incluso si una o dos no tienen que ser así.
más ... si declaraciones
if...else
Las declaraciones son una alternativa a una serie de if
declaraciones. Considera lo siguiente:
#include 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 if
declaración se evalúa como falsa, else...if
se verifica la condición de la declaración. Si esa condición se evalúa como verdadera, else...if
se ejecuta el código dentro de las llaves de la declaración.
Operadores de comparación
Nombre del operador | Uso | Resultado |
---|---|---|
Igual a | a == b | Verdadero si a es igual a b , falso en caso contrario |
No igual a | a != b | Verdadero si a no es igual a b , falso en caso contrario |
Mas grande que | a > b | Verdadero si a es mayor que b , falso en caso contrario |
Mayor qué o igual a | a >= b | Verdadero si a es mayor o igual que b , falso en caso contrario |
Menos que | a < b | Verdadero si a es menor que b , falso en caso contrario |
Menos que o igual a | a <= b | Verdadero si a es menor o igual que b , falso en caso contrario |
Operadores logicos
Es posible que deseemos que se ejecute un poco de código si algo no es cierto o si dos cosas son ciertas. Para eso tenemos operadores lógicos:
Nombre del operador | Uso | Resultado |
---|---|---|
No ( ! ) | !(a == 3) | Verdadero si noa es igual a 3 |
Y ( && ) | a == 3 && b == 6 | Verdadero si a es igual a 3 yb es igual a 6 |
O ( || ) | a == 2 || b == 4 | True if a is equal to 2 orb is equal to 4 |
For example:
#include 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; }
Output:
n is equal to 5 and m is equal to 10!
An important note about C comparisons
While we mentioned earlier that each comparison is checking if something is true or false, but that's only half true. C is very light and close to the hardware it's running on. With hardware it's easy to check if something is 0 or false, but anything else is much more difficult.
Instead it's much more accurate to say that the comparisons are really checking if something is 0 / false, or if it is any other value.
For example, his if statement is true and valid:
if(12452) { printf("This is true!\n") }
By design, 0 is false, and by convention, 1 is true. In fact, here’s a look at the stdbool.h
library:
#define false 0 #define true 1
While there's a bit more to it, this is the core of how booleans work and how the library operates. These two lines instruct the compiler to replace the word false
with 0, and true
with 1.