如何清除控制台
How can I clear console
如标题中所示。如何在C++中清除控制台?
用于纯C++
你不能。 C++甚至没有控制台的概念。
该程序可以打印到打印机,直接输出到文件,或者重定向到另一个程序的输入,以解决它所关心的一切。 即使您可以在C++中清除控制台,也会使这些情况变得更加混乱。
请参阅 comp.lang.c++ FAQ 中的此条目:
- https://isocpp.org/wiki/faq/input-output#clear-screen
特定于操作系统
如果清除程序中的控制台仍然有意义,并且您对特定于操作系统的解决方案感兴趣,则这些解决方案确实存在。
对于 Windows(如您的标签(,请查看此链接:
- 我们如何清除程序集中的控制台?
编辑:这个答案之前提到过使用system("cls");
,因为Microsoft说要这样做。但是,评论中指出这不是一件安全的事情。由于这个问题,我删除了Microsoft文章的链接。
库(有点便携(
ncurses 是一个支持控制台操作的库:
- http://www.gnu.org/software/ncurses/(在 Posix 系统上运行(
- http://gnuwin32.sourceforge.net/packages/ncurses.htm(有点旧的Windows端口(
对于 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[2Jx1B[H";
}
为此使用system
是丑陋的。
对我来说
最简单的方法,无需重新发明轮子。
void Clear()
{
#if defined _WIN32
system("cls");
//clrscr(); // including header file : conio.h
#elif defined (__LINUX__) || defined(__gnu_linux__) || defined(__linux__)
system("clear");
//std::cout<< u8"