제목에서와 같이. C ++에서 콘솔을 어떻게 지울 수 있습니까?
제목에서와 같이. C ++에서 콘솔을 어떻게 지울 수 있습니까?
답변:
순수 C ++ 용
당신은 할 수 없습니다. C ++에는 콘솔 개념조차 없습니다.
프로그램은 프린터로 인쇄하거나 파일로 직접 출력하거나 다른 프로그램의 입력으로 리디렉션 될 수 있습니다. C ++에서 콘솔을 지울 수 있다고해도 이러한 경우는 훨씬 더 복잡해집니다.
comp.lang.c ++ FAQ에서 다음 항목을 참조하십시오.
OS 별
프로그램에서 콘솔을 지우는 것이 여전히 타당하고 운영 체제 별 솔루션에 관심이 있다면 해당 솔루션이 존재합니다.
Windows의 경우 (태그에서와 같이) 다음 링크를 확인하십시오.
편집 : system("cls");
Microsoft가 그렇게 말했기 때문에 이전에을 사용하여 언급 한이 답변 입니다. 그러나 이것은 안전한 일이 아니라는 의견에서 지적되었습니다 . 이 문제로 인해 Microsoft 문서에 대한 링크를 제거했습니다.
라이브러리 (다소 이식 가능)
ncurses는 콘솔 조작을 지원하는 라이브러리입니다.
system
그 이유를 설명하는 기사에 링크를 추가했습니다.
Windows의 경우 콘솔 API를 통해 :
void clear() {
COORD topLeft = { 0, 0 };
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO screen;
DWORD written;
GetConsoleScreenBufferInfo(console, &screen);
FillConsoleOutputCharacterA(
console, ' ', screen.dwSize.X * screen.dwSize.Y, topLeft, &written
);
FillConsoleOutputAttribute(
console, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE,
screen.dwSize.X * screen.dwSize.Y, topLeft, &written
);
SetConsoleCursorPosition(console, topLeft);
}
가능한 모든 오류를 기꺼이 무시하지만 콘솔 지우기입니다. 아니 같은 system("cls")
더 나은 핸들 오류가 발생합니다.
* nixes의 경우 일반적으로 ANSI 이스케이프 코드를 사용할 수 있으므로 다음과 같습니다.
void clear() {
// CSI[2J clears screen, CSI[H moves the cursor to top-left corner
std::cout << "\x1B[2J\x1B[H";
}
system
이것을 사용 하는 것은 추악합니다.
echo
via system()
를 사용하는 것과 같습니다 .
system()
은 일반적인 실수입니다. 또한 Unices에 대해 제안 된 방법입니다. 이것이 POSIX 시스템에서해야 할 일입니다. "스크롤 백"규칙을 통합하지 않았음에도 불구하고 Win32 부분이 맞습니다.
창 콘솔에 여러 줄을 출력하는 것은 쓸모가 없습니다. 단지 빈 줄을 추가합니다. 슬프게도 방법은 창에 따라 다르며 conio.h (및 clrscr ()가 존재하지 않을 수 있으며 표준 헤더도 아님) 또는 Win API 메서드를 포함합니다.
#include <windows.h>
void ClearScreen()
{
HANDLE hStdOut;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD count;
DWORD cellCount;
COORD homeCoords = { 0, 0 };
hStdOut = GetStdHandle( STD_OUTPUT_HANDLE );
if (hStdOut == INVALID_HANDLE_VALUE) return;
/* Get the number of cells in the current buffer */
if (!GetConsoleScreenBufferInfo( hStdOut, &csbi )) return;
cellCount = csbi.dwSize.X *csbi.dwSize.Y;
/* Fill the entire buffer with spaces */
if (!FillConsoleOutputCharacter(
hStdOut,
(TCHAR) ' ',
cellCount,
homeCoords,
&count
)) return;
/* Fill the entire buffer with the current colors and attributes */
if (!FillConsoleOutputAttribute(
hStdOut,
csbi.wAttributes,
cellCount,
homeCoords,
&count
)) return;
/* Move the cursor home */
SetConsoleCursorPosition( hStdOut, homeCoords );
}
POSIX 시스템의 경우 더 간단합니다. ncurses 또는 터미널 기능을 사용할 수 있습니다.
#include <unistd.h>
#include <term.h>
void ClearScreen()
{
if (!cur_term)
{
int result;
setupterm( NULL, STDOUT_FILENO, &result );
if (result <= 0) return;
}
putp( tigetstr( "clear" ) );
}
// #define _WIN32_WINNT 0x0500 // windows >= 2000
#include <windows.h>
#include <iostream>
using namespace std;
void pos(short C, short R)
{
COORD xy ;
xy.X = C ;
xy.Y = R ;
SetConsoleCursorPosition(
GetStdHandle(STD_OUTPUT_HANDLE), xy);
}
void cls( )
{
pos(0,0);
for(int j=0;j<100;j++)
cout << string(100, ' ');
pos(0,0);
}
int main( void )
{
// write somthing and wait
for(int j=0;j<100;j++)
cout << string(10, 'a');
cout << "\n\npress any key to cls... ";
cin.get();
// clean the screen
cls();
return 0;
}
화면을 지우려면 먼저 모듈을 포함해야합니다.
#include <stdlib.h>
이것은 Windows 명령을 가져옵니다. 그런 다음 '시스템'기능을 사용하여 배치 명령 (콘솔 편집)을 실행할 수 있습니다. C ++의 Windows에서 화면을 지우는 명령은 다음과 같습니다.
system("CLS");
그러면 콘솔이 지워집니다. 전체 코드는 다음과 같습니다.
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
system("CLS");
}
그게 전부입니다! 행운을 빕니다 :)
stdlib.h
C 표준에 의해 지정되며 "Windows 명령 가져 오기"와는 관련이 없으며 실제로 Windows 자체와도 관련이 없습니다. 그 nitpicking 외에는 괜찮습니다.
Windows에서 :
#include <cstdlib>
int main() {
std::system("cls");
return 0;
}
Linux / Unix :
#include <cstdlib>
int main() {
std::system("clear");
return 0;
}
system("cls")
화면을 지우는 데 사용 :
#include <stdlib.h>
int main(void)
{
system("cls");
return 0;
}
다음은이를 수행하는 간단한 방법입니다.
#include <iostream>
using namespace std;
int main()
{
cout.flush(); // Flush the output stream
system("clear"); // Clear the console with the "system" function
}
사용 System :: Console :: Clear ();
그러면 버퍼가 비워집니다.
#include <cstdlib>
void cls(){
#if defined(_WIN32) //if windows
system("cls");
#else
system("clear"); //if other
#endif //finish
}
어디에서나 cls () 호출
system ( "")을 통해 운영 체제의 clear console 메서드를 사용할 수 있습니다.
Windows의 경우 system ( "cls"); 예를 들어
다른 운영 체제에 대해 세 가지 다른 코드를 릴리스하는 대신. os가 실행되는 것을 얻는 방법을 만드십시오.
고유 한 시스템 변수는 #ifdef와 함께 존재하는 경우는 감지하여이 작업을 수행 할 수 있습니다
예를 들어,
enum OPERATINGSYSTEM = {windows = 0, mac = 1, linux = 2 /*etc you get the point*/};
void getOs(){
#ifdef _WIN32
return OPERATINGSYSTEM.windows
#elif __APPLE__ //etc you get the point
#endif
}
int main(){
int id = getOs();
if(id == OPERATINGSYSTEM.windows){
system("CLS");
}else if (id == OPERATINGSYSTEM.mac){
system("CLEAR");
} //etc you get the point
}
편집 : 완전히 다시 질문
어떤 시스템에 있는지 테스트하고 시스템에 따라 시스템 명령을 보내십시오. 이것은 컴파일 타임에 설정되지만
#ifdef __WIN32
system("cls");
#else
system("clear"); // most other systems use this
#endif
이것은 완전히 새로운 방법입니다!
cout
하기 위해 파일로 리디렉션되었을 수 있습니다. 그렇다면 콘솔에 대한 개념이 전혀 없습니다.
사용 : clrscr ();
#include <iostream>
using namespace std;
int main()
{
clrscr();
cout << "Hello World!" << endl;
return 0;
}
가장 쉬운 방법은 스트림을 여러 번 플러시하는 것입니다 (이상적으로는 가능한 콘솔보다 더 큼). 1024 * 1024는 콘솔 창이 결코 될 수없는 크기 일 것입니다.
int main(int argc, char *argv)
{
for(int i = 0; i <1024*1024; i++)
std::cout << ' ' << std::endl;
return 0;
}
이것의 유일한 문제는 소프트웨어 커서입니다. 플랫폼 / 콘솔에 따라 깜박이는 것 (또는 깜박이지 않는 것)은 콘솔의 상단이 아니라 콘솔의 끝에 있습니다. 그러나 이것은 희망적으로 문제를 유발해서는 안됩니다.