C++/Function

clrscr(), gotoxy(), delay(x) 합수

gandus 2010. 5. 13. 13:31

Borland C++ 의 conio.h에 들어있던 콘솔용 기능인 clrscr(), gotoxy(x,y), delay(x) 는 Visual C++ 이나 gcc, Dev C++등에서는 사용할 수 없다.
그러나 clrscr(), delay(x), gotoxy(x,y)는 windows.h 를 이용해 Visual C++이나 Dev C++ 에서 구현할 수 있다.
인터넷에 떠도는 것들 중에서 잘못된 게 많아, 여기에 이렇게 올린다.

사실 이것도 잘 만든 것인지는 잘 모르지만, 나름대로의 테스트로 제대로 구현했다고 본다.


1. gotoxy();

참고 : 인터넷에서 떠도는 것 중에서, x,y대신 x-1, y-1이라고 되어있는 경우가 있는데, 이는 잘못된 것이다.
이는 추후에 올릴 nibbles for  Dev C++
(in Windows) 에서 그 이유를 알 수 있다.

 

#include <windows.h>

void gotoxy(int x, int y)
{
   COORD Pos = {x, y};
   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}

한글과 특수문자는  좌표 2를 ,   영문은 좌표 1을  소모한다. (바이트와 동일)

2. clrscr();

주의 : clrscr()을 사용하기 위해서는 필히 gotoxy(); 가 필요하다.
printf(만을 가지고 구성해보려고 한 적이 있으나, 화면 떨림이 너무 심해서 포기했다.
참고 : 인터넷에서 떠도는 중에는 #include <windows.h>를 이용하여,
system("cls");를 사용하라는 사람들이 있는데, 이는 매우 비효율적이다.

실제로 프로그램을 구현할 때 속도차가 많이 나는 것을 알 수 있다.

 

#include <stdio.h>

void clrscr (void)
{  
    for (int i = 0; i<24; i++) { // 콘솔 화면이 24줄까지임을 이용
        gotoxy(0,i);
        printf("%80c",' '); // 콘솔 가로의 칸이 80칸임을 이용. 참고로 안 띄면 실행 에러
    }
   
}

 

3. delay();

참고 : delay()는 windows.h에 Sleep()라는 함수가 동일한 기능을 하므로, 단순히 치환해주면 끝이다. 
그러나 Borland C++로 짜여진 장문의 프로그램에서 이를 치환하는 건 매우 힘들 수 있으므로,

다음과 같이 구현하자.(주의! Sleep()는 sleep()가 아니다.)

 

#include <windows.h>

void delay(int x)

{

    Sleep(x);
}