내 프로그램에 일부 코드가 있습니다. 아래 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
이와 같이 화면 조작을 수행하는 경우 이 모든 작업을 수동으로 수행하기보다는 라이브러리를 살펴보는 것이 좋습니다 .
또한 창 크기 설정은 여러 터미널에서만 작동하며 논쟁의 여지가 있는 나쁜 습관이라는 점에 유의하십시오. 잘 작성된 앱은 적절한 창 크기에 관계없이 작동해야 합니다.