2011-02-26 7 views
9

Cuando compilo y ejecuto este código (es parte de un programa mucho más grande), Linux llega a la mitad del ciclo while, luego simplemente deja de funcionar.¿Por qué C se atascaría a la mitad de un bucle while?

El siguiente código imprime time: 0 y luego se bloquea, sin hacer nada más hasta que suspender el proceso. ¿Por qué imprimiría time: 0 pero no la siguiente línea de verificación de cordura?

while (i < 5) 
{ 
    printf("time: %d\n",elapsedTime); 
    printf("sanity check"); 
    foo(); 
    i++; 
} 

Respuesta

22

La salida normalmente se almacena en el búfer y solo se escribe después de un color o nueva línea. En

printf("sanity check"); 

no hay ningún salto de línea, por lo que si se ejecuta en un bucle sin fin después de esto, no lo verá. Reemplazar con

printf("sanity check\n"); 

o

printf("sanity check"); 
fflush(stdout); 

y verá él.

+0

Oh bueno. Estaba preocupado por la función, pero pensé que ni siquiera lo estaba alcanzando. Ahora que sé que soy * soy *, puedo seguir depurando. ¡Gracias!. Aceptaré la respuesta en 10 min. cuando puedo. –

+1

@Raven: Si hubieras utilizado un depurador para depurar (la pista está en el nombre), hubieras sabido que había llegado tan lejos, y probablemente por qué finalmente estaba fallando (en foo() sin duda). – Clifford

+0

@Clifford - yup. Me ha echado a perder el desarrollo de Visual Studio y C#. Desafortunadamente, no puedo hacer que VS maneje un entorno simple de C, así que estoy solo con JEdit. –

Cuestiones relacionadas