2013-08-25 1 views
1

gotoxy() 함수 사용의 printf()의 위치

안녕하세요
은 내가

gotoxy() implementation for Linux using printf을 읽고
gotoxy() 기능을 필요로하는 프로젝트를하고 있어요 궁금 왜

void gotoxy(int x,int y) 
{ 
    printf("%c[%d;%df",0x1B,y,x); 
} 

printf에서 xy 순서를 변경해야합니다. 좌표계에 맞습니까? 내 방식으로
, 내 같은 루프에서이 gotoxy()을 사용하는 동안, STIL 내 요구

을 충족 printf("%c[%d;%df",0x1B,x,y)로 변경 :

for(int i = 0; i < 12; i++) { 
     for(int j = 0; j < 12; j++) { 
      gotoxy(i , j); 
      usleep(500000); 
     } 
    } 


때 = 0, I = 0, 커서가 첫 번째 행에 있습니다
왜 i = 1 일 때 커서가 두 번째 행으로 이동하지 않는지 궁금하십니까?

답변

2

x와 y의 순서는 변수의 이름이 gotoxy() 함수의 작동에 아무런 의미가 없기 때문에 중요합니다.

이 함수는 지정된 좌표로 이동하는 터미널 명령 시퀀스를 출력합니다. 터미널이 명령 시퀀스를보고 처리 할 때, y가 먼저 나오는 것으로 예상됩니다.

그러나이 솔루션은 프로그램이 실행되는 터미널 유형에 따라 크게 달라 지므로주의해야합니다. 터미널 화면에서 무작위로 이동하고 그림을 그리는 넓은 터미널 지원을 얻으려면 ncurses 또는 curses이 최선의 방법입니다. 그들은 처음에는 배우기가 어렵습니다.

1

터미널 이스케이프 시퀀스를 사용할 때 열 및 행 위치가 0에서 시작하지 않습니다. 그들은 1에서 시작합니다.

커서를 이동하려면 stdout을 플러시해야합니다.

void gotoxy(int x,int y) 
{ 
    printf("%c[%d;%df",0x1B,y,x); 
    fflush(stdout); 
} 
3

OP : "필요는 x 및 y 순서를 변경하는 이유".
커서 위치 명령의 형식은 그 형식과 일치하고 ROW 같은 y 변수가 있기 때문에가 발생

Force Cursor Position <ESC>[{ROW};{COLUMN}f 

필요가있다, y 먼저 온다. 대신 화면을 90도 회전시킬 수 있습니다.

OP : 왜 i = 1 일 때 커서가 두 번째 행으로 이동하지 않습니까?
화면의 왼쪽의 홈 위치가 원산지 인 라인 1, 열입니다 1

참고 : 당신은 형식에 이스케이프 문자를 넣을 수 있습니다

printf("\x1B[%d;%df", y, x); 
fflush(stdout); // @jxh 
+1

[] {{ROW}; {COLUMN} f}이 함수와 관련되어 전체를 집으로 가져 오는 방법을 보여줍니다. – ryyker

0

GotoXY는 현재 창의 원점을 기준으로 커서를 (X, Y), X에서 가로, Y를 세로 방향으로 배치하는 함수 또는 프로 시저입니다. 원점은 창의 왼쪽 위 모서리 인 (1,1)에 있습니다.