C プログラミングで sleep(int) コードが正しい順序で実行されない

C プログラミングで sleep(int) コードが正しい順序で実行されない

私のプログラムにはいくつかのコードがあります。以下の for ループで sleep(int) を使用してターミナルで読み込み画面を実行しようとしていますが、正しい順序で実行されません。これが私のコードです:

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);
}

始める ランニングスリープ コードは完了しました

わかりやすく説明してください!!

答え1

sleep()は必要なときにいつでも実行されますが、printf()文字をすぐには出力しません。改行文字に遭遇するまで出力をバッファリングします。これを実行すると良いでしょうfflush(3)。詳細についてはマニュアル ページを参照してくださいstdio(3)

ncursesこのような画面操作を行う場合は、すべてを手動で行うのではなく、ライブラリを確認することをお勧めします。

また、ウィンドウ サイズの設定はいくつかの端末でのみ機能し、おそらく悪い習慣であることに注意してください。適切に作成されたアプリは、適切なウィンドウ サイズであれば何でも動作するはずです。

関連情報