В моей программе есть коды. Я пытаюсь запустить экран загрузки в Терминале, используя 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);
}
Помогите мне прояснить ситуацию !!
sleep()
выполняется каждый раз, когда требуется, но printf()
сразу не печатает символы. Это буферизует вывод, пока с новой строкой не встречаются. Вы должны fflush(3)
это. Посмотрите stdio(3)
страница руководства для деталей.
При выполнении экранного управления как это Вы могли бы хотеть смотреть на ncurses
библиотека вместо того, чтобы вручную делать все это.
Также обратите внимание, что установка размера окна только работает в нескольких терминалах и является спорной плохой практикой. Правильно написанное приложение должно работать с любым разумным размером окна, который это получает.