Код sleep(int) не выполняется в правильном порядке в программировании на языке C

Код sleep(int) не выполняется в правильном порядке в программировании на языке C

У меня в программе есть несколько кодов. Я пытаюсь запустить экран загрузки в терминале, используя sleep(int) в цикле for ниже, но он не делает этого в правильном порядке. Вот мои коды:

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а не делать все это вручную.

Также обратите внимание, что настройка размера окна работает только в нескольких терминалах и является спорной плохой практикой. Хорошо написанное приложение должно работать с любым разумным размером окна, который оно получает.

Связанный контент