我的程式中有一些程式碼。我試圖透過在下面的 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
庫而不是手動執行所有這些操作。
另請注意,設定視窗大小僅適用於多個終端,可以說是不好的做法。一個編寫良好的應用程式應該適用於它所獲得的任何合理的視窗大小。