Pergunta

Eu quero escrever um pequeno programa que deve imprimir algo como

testar CPU ... Feito
testando RAM ... feito

e assim por diante.

Eu escrevi o seguinte programa em C:

printf( "testing RAM...\t\t" );
sleep( sleep_time );
printf( "done\n\n" );

printf( "testing HDD...\t\t" );
sleep( sleep_time );
printf( "done\n\n" );

onde sleep_time é 2.

No entanto, em vez de imprimir "testar CPU ..." em primeiro lugar, em seguida, à espera, em seguida, imprimir o "feito", ele primeiro espera, em seguida, imprime a linha inteira, que não é exatamente o que eu tinha em mente.

Eu suponho que isso tem algo a ver com otimização automática pelo compilador.
Enfim, o que eu posso fazer para obter o resultado desejado?

Estou usando o Xcode 3.1 na OSX 10.5.6

Obrigado,
Bastian

Foi útil?

Solução

O problema é que suas impressões são tamponados. imediatamente antes de dormir, fflush chamada (stdout); para liberar o buffer

Outras dicas

compilador pode impressões não Reordenar e dorme, pois eles são "comportamento observável externamente" da máquina abstrata C.

O que você recebe é devido ao buffer de saída padrão. Você pode usar fflush ou imprimir para stderr, que não é tamponada.

Apenas usando \ n ou um endl no final do primeiro printf deve ser suficiente

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top