sleep(int)-Code wird in der C-Programmierung nicht in der richtigen Reihenfolge ausgeführt

sleep(int)-Code wird in der C-Programmierung nicht in der richtigen Reihenfolge ausgeführt

Ich habe einige Codes in meinem Programm. Ich versuche, den Ladebildschirm im Terminal auszuführen, indem ich sleep(int) in einer For-Schleife unten verwende, aber es funktioniert nicht in der richtigen Reihenfolge. Dies sind meine Codes:

void LOAD()
{
    change_Terminal_Size(75 , 25);
    change_Background_To_Green();
    fill_The_Screen(75 , 25);
    int j;
    gotoxy(34,14); 
    change_Background_To_Black();
    printf(" LOADING....");
    for(j = 30 ; j <= 50; j++)
    {
        gotoxy(j,13);
        printf(" ");
        sleep(1);
    }
    gotoxy(34,14); printf(" COMPLETED  ");
    gotoxy(27,16); printf("PRESS ANY KEY TO CONTINUE");
}
void change_Terminal_Size(int width , int height)
{
    printf("\e[8;%d;%dt" , height , width);
}
void change_Background_To_Green()
{
    printf("\033[42m");
}
void fill_The_Screen(int width , int length)
{
    for(int i = 0 ; i < width ; i++)
    for(int j = 0 ; j < length ; j++)
    printf("%c" , 32);
}
void change_Background_To_Black()
{
    printf("\033[40m");
}
void gotoxy(int x, int y)
{
    printf("%c[%d;%df", 0x1B, y, x);
}

Start Laufender Schlaf Der Code ist fertig

Helfen Sie mir, das klar auszudrücken!!

Antwort1

sleep()wird bei Bedarf ausgeführt, printf()druckt die Zeichen aber nicht sofort. Es puffert die Ausgabe, bis eine neue Zeile gefunden wird. Das sollten Sie tun fflush(3). Weitere Informationen finden Sie auf der stdio(3)Manualpage.

Wenn Sie Bildschirmmanipulationen dieser Art durchführen, sollten Sie einen Blick in die ncursesBibliothek werfen, anstatt dies alles manuell durchzuführen.

Beachten Sie auch, dass das Einstellen der Fenstergröße nur in einigen Terminals funktioniert und wohl eine schlechte Praxis ist. Eine gut geschriebene App sollte mit jeder vernünftigen Fenstergröße funktionieren, die sie bekommt.

verwandte Informationen