Respuesta a la pregunta de examen ¿es un bucle infinito?

Hace unos días publiqué una pregunta sobre bucles infinitos en C. Hoy os pongo la respuesta.

El programa era:

#include <stdio.h>
 
int main() {
	int i;
	for (i=0; i>=0; i++) {
		printf("Soy un bucle infinito\n");
	}
 
	return 0;
}

Aparentemente sí tenemos un bucle infinito, puesto que i empieza cumpliendo la condición i>=0 y así seguirá aunque i incremente su valor.

PEEEEERO, debemos tener en cuenta que en un int no podemos almacenar un número infinito. Por ejemplo en un compilador de 32 bits el mayor número que se puede almacenar en un int es 2.147.483.647. ¿Y qué sucede cuando llegamos al 2.147.483.648? Pues que el compilador continúa en el siguiente número válido que es el -2.147.483.647. Este número, claro, ya no cumple con la condición del for. Por lo tanto el programa finalizará en ese punto.

Así que no, no tenemos un bucle infinito. Es un bucle largo pero no infinito.

Si quieres comprobarlo sin tener que esperar un rato puedes probarlo usando un char:

#include <stdio.h>
 
int main() {
	char i;
	for (i=0; i>=0; i++) {
		printf("Soy un bucle infinito\n");
	}
 
	return 0;
}

Otra opción sería:

#include <stdio.h>
#include <limits.h>
 
int main() {
	int i;
	for (i=INT_MAX -10; i>=0; i++) {
		printf( "Am I and infinite loop? (loop %u)\n", i );
	}
 
	return 0;
}

Curso de programación en C para principiantes

Ejercicios de C resueltos y comentados

One thought on “Respuesta a la pregunta de examen ¿es un bucle infinito?

Deja un comentario