es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

comportamiento del bucle while en la programación en C

Salida en este caso es 1


int main() {
int i = 500;
while( (i++) != 0 );
printf("%d\n", i);
return;
}

Salida en este caso es 0

int main() {
    int i = 500;
    while( (i=i+1) != 0 );

<pre><code>printf("%d\n", i);
return;
</code></pre>

<p>}

No estoy seguro de por qué obtenemos esta salida diferente en cada caso, quiero decir, ¿por qué obtengo 1 en el primer caso y 0 en el segundo caso?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La diferencia en la salida de los dos fragmentos de código se debe al uso de diferentes operadores de incremento.

    En el primer caso, se utiliza el operador de post-incremento (i++), que incrementa el valor de i en 1 después de haber sido evaluado en la condición del bucle while. La condición verifica si el valor actual de i no es igual a cero, por lo que el bucle continuará hasta que i llegue a 0. Sin embargo, dado que el valor inicial de i es mayor que cero, el bucle no se ejecutará en absoluto y i permanecerá en 500. Por lo tanto, la salida de la declaración printf será 1, que es el valor de i después de la operación de post-incremento.

    En el segundo caso, se utiliza la expresión i=i+1 para incrementar el valor de i. Aquí, el operador de asignación (=) se utiliza para asignar el resultado de la suma a i, por lo que el valor de i se incrementa antes de que se evalúe la condición en el bucle while. Dado que el valor inicial de i es mayor que cero, el bucle continuará hasta que i supere el valor máximo que puede ser almacenado por un int (que depende de la implementación, pero generalmente es 2147483647). Una vez que i alcanza este valor, el siguiente incremento hará que se desborde y se vuelva negativo, lo que hará que la condición se evalúe como falsa y se salga del bucle. Por lo tanto, la salida de la declaración printf será 0, que es el valor actual de i.

Comments are closed.