2010년 5월 23일 일요일

gotoxy()

콘솔 화면은 일반적으로 가로로 80개의 문자를 표시할 수 있고 세로로 25줄을 출력할 수 있다. 윈도우즈의 콘솔은 설정하기에 따라 더 넓은 폭을 가질 수도 있고 스크롤도 가능하지만 여기서는 도스나 유닉스의 콘솔과 비슷하다고 생각하기로 하자. 콘솔은 80*25의 바둑판같은 좌표 공간이라고 할 수 있는데 각 위치는 x축과 y축의 좌표값을 가진다. 그림으로 그려 보면 다음과 같을 것이다.

 좌상단의 원점 좌표가

(0,0)이 되며 우하단은 (79,24)가 되고 중앙의 좌표는 (40,12) 정도가 될 것이다. 콘솔 화면으로의 모든 출력은 항상 커서가 있는 현재 위치를 참조하도록 되어 있으며 printf로 문자열을 출력하면 현재 위치에 문자열이 출력된다. 모든 출력문들은 현재 커서 위치에 문자열을 출력하며 출력한 후 커서를 다음 위치로 옮겨 주는데 커서는 왼쪽에서 오른쪽으로, 위에서 아래로 마치 타자기에 글씨를 써

 

 내려가는 것처럼 움직인다. 그래서 printf를 계속 호출하면 연속적으로 문자열이 출력된다.

 

gotoxy 함수는 커서의 위치, 그러니까 다음 문자열이 출력될 좌표값을 바꾼다. 인수로 옮기고자 하는 x, y 좌표를 지정하면 커서가 이동하며 이어지는 출력은 이 위치로 나가게 된다. 현재 위치가 아닌 특정 위치에 출력하고 싶다면 출력 명령을 사용하기 전에 gotoxy로 원하는 좌표값을 지정한다. 다음 예제는 화면을 깨끗하게 지운 후 중앙에 문자열을 출력한다.

 

#include <stdio.h>
//nclude <conio.h>
#include <windows.h>
void gotoxy(int x, int y)             /* 커서이동 함수 부분 */
{
    COORD XY = {x-1, y-1};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), XY);
}

int main(void)
{
 
 gotoxy(37,12);
 
 printf("center\n");
 
 return 0;
}
깨끗한 화면 중앙에 "center"라는 문자열이 출력될 것이다. 수평 중앙 좌표는 40이지만 center가 6자의 길이를 가지므로 t자가 40좌표에 올 수 있도록 3만큼 더 뺀 위치에 출력했다. 커서를 옮기는 것은 그 자리에 어떤 출력을 하기 위해서이므로 gotoxy 다음에는 거의 항상 printf나 puts같은 출력 명령이 뒤따른다.

댓글 3개:

  1. thank you! good information!
    I'm korean, but I can't write korean here.

    답글삭제
  2. 감사합니다
    깔끔하게 정리되었습니다
    -

    답글삭제