fflush e while loop
-
26-09-2019 - |
Domanda
Ho cercato di usare FFLUSH per fare una barra di avanzamento. Per testare Fflush, ho scritto il piccolo codice di seguito.
Funziona come dovrebbe quando sono insolito "Sleep (1);" Ma funziona in modo inaspettato se rimane commentato. Stampa il primo trattino, attende che stampe rimanenti 9 di loro e si smette.
Non capisco perché faccia la differenza.
int main()
{
int f,j;
j =0;
for(f=0;f<10;f++)
{
printf("-");
fflush(stdout);
while(j++<1000000000);
//sleep(1);
}
}
Soluzione
Cambia il tuo loop così:
da:
for(f=0;f<10;f++)
a:
for(f=0, j=0; f<10; f++, j=0)
Altri suggerimenti
Devi impostare j
Torna a zero dopo il ciclo. La prossima iterazione salterà solo per il ciclo.
Questo perché non si ripristina il contatore del ciclo interno j
a zero ad ogni iterazione del ciclo esterno, cioè il while()
viene eseguito solo la prima volta. Niente da così con fflush()
:)
Per la prima "per" iterazione f=0
, stamperà il primo trattino, quindi eseguirà j
Fino a 1 miliardo, e quindi stamperà i nove trattini rimasti perché J è superiore a 1 miliardo, quindi non più attesa o ritardo. È così che dovrebbe funzionare se sleep(1)
è commentato.
Potresti voler aggiungere la linea j=0;
Dopo il ciclo while per reimpostare da J a zero.
Quando sei un redenzio sleep(1)
Ci sarà un piccolo ritardo quasi impercettibile (immagino 1 millisecondo) dopo aver stampato ogni trattino.