도스창에서 화면을 지워주는 명령어인 cls를 구현한 것입니다.
물론 "system("cls");"로 똑같은 기능에 구현이 가능하지만
많이 사용하게 될 경우 메모리 누수가 발생하게 됩니다.
이를 보안하기 위한 코드입니다.
하지만 이 코드는 Windows에서만 작동하고, LINUX C에서는
동작하지 않습니다. 그 이유는 텍스트 모드 창의 화면을 지우는 작업을
터미널이나 OS에 독립적으로 하는 것이 불가능하기 때문입니다.
[[Source]]
#include <stdio.h>
#include <conio.h> // 예제 속의 getch() 함수를 위해
#include <Windows.h>
void cls(HANDLE hConsole);
int main(void)
{
puts("이런저런 문자열들...");
puts("이런저런 문자열들...");
puts("이런저런 문자열들...");
puts("");
puts("이제 화면을 지우겠습니다. 아무 키나 누르세요.");
getch(); // 화면 중지
// 현재 도스창에 대한 핸들 얻기
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
cls(hConsole);
return 0;
}
// 원본 소스: http://support.microsoft.com/kb/q99261/
// 여기서부터, 화면 지우기 함수가 시작됨
/* Standard error macro for reporting API errors */
#define PERR(bSuccess, api)
{
if(!(bSuccess))
printf("%s:Error %d from %s on line %d\n", __FILE__, GetLastError(), api, __LINE__);
}
void cls( HANDLE hConsole )
{
COORD coordScreen = { 0, 0 }; /* here's where we'll home the cursor */
BOOL bSuccess;
DWORD cCharsWritten;
CONSOLE_SCREEN_BUFFER_INFO csbi; /* to get buffer info */
DWORD dwConSize; /* number of character cells in the current buffer */
/* get the number of character cells in the current buffer */
bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi );
PERR( bSuccess, "GetConsoleScreenBufferInfo" );
dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
/* fill the entire screen with blanks */
bSuccess = FillConsoleOutputCharacter( hConsole, (TCHAR) ' ',
dwConSize, coordScreen, &cCharsWritten );
PERR( bSuccess, "FillConsoleOutputCharacter" );
/* get the current text attribute */
bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi );
PERR( bSuccess, "ConsoleScreenBufferInfo" );
/* now set the buffer's attributes accordingly */
bSuccess = FillConsoleOutputAttribute( hConsole, csbi.wAttributes,
dwConSize, coordScreen, &cCharsWritten );
PERR( bSuccess, "FillConsoleOutputAttribute" );
/* put the cursor at (0, 0) */
bSuccess = SetConsoleCursorPosition( hConsole, coordScreen );
PERR( bSuccess, "SetConsoleCursorPosition" );
return;
}
위의 예제를 실행하면 테스트용 문자열들이 우선 나옵니다.
아무 키나 누르면 현재 도스창 화면이 완전히 지워지고, 커서 위치도 초기화됩니다.
여기서 참고해야 할 것은
VC 2005나 그 이상 버전의 컴파일러에서는 getch() 함수를 _getch() 로 변경해 주어야 합니다. 함수명 앞에 밑줄이 붙은 _getch() 함수는 보안이 강화된 함수입니다.
출처 : http://mwultong.blogspot.com/2006/11/c-vc-cls-console-clear-screen-function.html