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库,而不是手动完成所有这些操作。

还请注意,设置窗口大小仅在几个终端上有效,这可能是一种不好的做法。编写良好的应用程序应该能够适应任何合理的窗口大小。

相关内容