C no sólo ejecuta código linealmente. Toma decisiones. En el centro de cada decisión que toma un programa en C se encuentra la expresión booleana. Ya sea que esté utilizando una declaración if o un bucle ` while, la lógica se reduce a una cosa: ¿esta condición es verdadera o falsa?
Veamos un ejemplo básico.
Aquí, el programa solicita información. Almacena ese número en la variable b. Luego verifica una condición. La expresión booleana en cuestión es (b < 0). C evalúa esto. Si el resultado es verdadero, el programa imprime "El valor es negativo". Si es falso, el programa no hace nada. Se queda en silencio.
La regla es sencilla. Si la expresión se evalúa como Verdadero, C ejecuta la línea única inmediatamente después de "if". O, si usa llaves {}, ejecuta todo el bloque dentro. Si la expresión es Falsa, C omite esa línea o bloque por completo.
Pero los programas rara vez abordan un solo resultado. A menudo también es necesario manejar cero o números positivos.
Esta estructura utiliza "else if" y "else" para cubrir los casos restantes. A continuación prueba cero. Si eso falla, se supone que el valor es positivo.
A veces, las decisiones se complican. Es posible que deba verificar varias condiciones a la vez.
Esta declaración se lee como lenguaje natural. Si x es igual a y Y j es mayor que k, entonces establezca z en 1. De lo contrario, establezca q en 10. Utilizará este tipo de declaraciones a lo largo de su carrera en C. La mayoría de las decisiones serán simples. En ocasiones, se volverán complejos.
Preste mucha atención a la sintaxis. Un error común para los principiantes es confundir tarea con comparación.
C usa == para probar la igualdad.
C usa = para asignar un valor a una variable.
Mezclarlos provoca errores que son difíciles de encontrar. Uno fija un valor. El otro comprueba una condición. No son intercambiables.
C también depende de operadores específicos para operaciones lógicas. El símbolo && representa una operación booleana AND. Garantiza que ambos lados de la condición sean verdaderos.
Aquí hay una referencia rápida para todos los operadores booleanos en C:
- == : igualdad
- != : desigualdad
- < : menos de
- > : mayor que
- <= : menor o igual a
- >= : mayor que

Lógica de bucle en C: while, do- while y for
Usar un bucle ** while ** es sencillo. Refleja la simplicidad de una declaración if estándar. Considere este fragmento:
mientras (a < b) { printf("%d\n", a); un = un + 1; }
Esta estructura ejecuta las dos líneas dentro de las llaves repetidamente. Se detiene sólo cuando a es mayor o igual que b. La lógica es lineal. Verificar condición. Ejecutar cuerpo. Repetir.
C también ofrece una construcción hacer-mientras. A diferencia del bucle while estándar, este verifica la condición después de la primera ejecución. Esto garantiza que el bloque de código se ejecute al menos una vez.
Nota: El ejemplo anterior utiliza una declaración if dentro de la función. Un verdadero "do- while" envolvería el cuerpo y comprobaría el estado al final.
El bucle for como abreviatura
El bucle for es esencialmente una declaración ** while** comprimida. Incluye inicialización, prueba e incremento en una sola línea.
Mire este bucle while estándar:
x=1;
mientras (x<10) {
bla, bla, bla
x++; // x++ es idéntico a x=x+1
}
Puedes reescribir esto como un bucle for:
para(x=1; x<10; x++) { bla, bla, bla }
Los componentes son claros. x=1 se inicializa. x<10 pruebas. x++ incrementos. El bucle for simplemente los condensa. No estás limitado a variables simples. Puedes incluir lógica compleja en esas ranuras.
Tome este ejemplo:
a=1;
b=6;
mientras (a
Se convierte en:
for (a=1,b=6; a < b; a++,printf("%d\n",a));
Funciona. También es confuso. El operador de coma permite múltiples declaraciones en las secciones de inicialización e incremento. No funciona en la sección de prueba. A muchos desarrolladores de C les encanta esta compacidad. Otros lo encuentran ilegible. Lo rompen. Ambos enfoques son válidos. Elija según quién mantendrá el código más adelante.
El peligro de = vs. == en C
El operador == causa dolores de cabeza. Los desarrolladores suelen escribir un solo = por error en expresiones booleanas. El compilador acepta ambos. El comportamiento difiere enormemente.
En C, las expresiones booleanas se evalúan como números enteros. El cero es falso. Cualquier número entero distinto de cero es Verdadero. Esto significa que cualquier número entero puede existir dentro de un contexto booleano.
Considere este código C legal:
if (a) { printf("Diferente de cero"); }
Si a es cualquier cosa menos 0, el bloque se ejecuta.
Ahora mira si (a=b). Esto no compara valores. Asigna b a a y luego prueba el nuevo valor de a. Si b es 0, la condición es Falsa. Si b es algo más, es Verdadero. La variable a cambia. Probablemente esto no sea lo que pretendías. Probablemente quisiste decir == para comparar.
Esta característica no es inútil. Tiene casos de uso válidos. Pero es una trampa. Tenga cuidado con su uso = y ==. Un personaje cambia la lógica de la comparación a la asignación.


































