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);
     }
}
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top