我如何清除控制台

在标题中。 我怎样才能清除控制台在C + +?

对于纯粹的C ++

你不能。 C ++甚至没有控制台的概念。

该程序可以打印到打印机,直接输出到一个文件,或redirect到另一个程序的input所有它关心的。 即使你可以用C ++清除控制台,也会使这些情况变得更加复杂。

在comp.lang.c ++ FAQ中查看这个条目:

操作系统相关

如果在程序中清除控制台仍然有意义,并且您对操作系统特定的解决scheme感兴趣,那么确实存在。

对于Windows(如您的标签),请查看这些链接:

这些解决scheme中最简单的是:

#include <stdlib.h> int main(int argc, char* argv[]) { system("cls"); return 0; } 

图书馆(有点便携)

ncurses是一个支持控制台操作的库:

对于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只是丑陋的。

对于Linux / Unix和其他一些,但不适用于Windows之前的TH2:

 printf("\033c"); 

将重置terminal。

 // #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; } 

使用system("cls")清除屏幕:

 #include <stdlib.h> int main(void) { system("cls"); return 0; } 

输出多行到窗口控制台是没用的..它只是增加空行。 可悲的是,方式是Windows特定的,并涉及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或者terminal函数

 #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" ) ); } 

要清除屏幕,您首先需要包含一个模块:

 #include <stdlib.h> 

这将导入Windows命令。 然后,您可以使用“系统”function来运行批处理命令(编辑控制台)。 在C ++的Windows中,清除屏幕的命令是:

 system("CLS"); 

这将清除控制台。 整个代码将如下所示:

 #include <iostream> #include <stdlib.h> using namespace std; int main() { system("CLS"); } 

而这就是你所需要的! 祝你好运 :)

在Windows中:

 #include <cstdlib> int main() { std::system("cls"); return 0; } 

在Linux / Unix中:

 #include <cstdlib> int main() { std::system("clear"); return 0; } 

这是真的波涛汹涌,但尝试:

 void cls() { for (int i = 0; i < 250; ++i) { std::cout << endl; } } 

这是很难做的MAC看,因为它不能访问窗口function,可以帮助清除屏幕。 我最好的解决办法是循环和添加行,直到terminal清除,然后运行程序。 但是,如果您主要和经常使用这个function,那么效率和记忆效率都不是很高。

 void clearScreen(){ int clear = 5; do { cout << endl; clear -= 1; } while (clear !=0); } 

使用System :: Console :: Clear();

这将清除(清空)缓冲区

您可以通过系统(“”)使用操作系统的清除控制台方法;
对于Windows系统(“cls”); 例如
而不是为不同的操作系统发布三种不同的代码。 只是做一个方法来获取操作系统正在运行。
你可以通过检测#ifdef是否存在唯一的系统variables来做到这一点
例如

 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 } 
 #include <cstdlib> void cls(){ #if defined(_WIN32) //if windows system("cls"); #else system("clear"); //if other #endif //finish 

}

只要调用cls()在任何地方

使用:clrscr();

 #include <iostream> using namespace std; int main() { clrscr(); cout << "Hello World!" << endl; return 0; } 

编辑:完全重做的问题

只需testing他们所在的系统,并根据系统发送系统命令。 虽然这将在编译时设置

 #ifdef __WIN32 system("cls"); #else system("clear"); // most other systems use this #endif 

这是一个全新的方法!

最简单的方法是多次刷新stream(理想情况下大于任何可能的控制台)1024 * 1024可能是控制台窗口无法达到的大小。

 int main(int argc, char *argv) { for(int i = 0; i <1024*1024; i++) std::cout << ' ' << std::endl; return 0; } 

唯一的问题是软件光标; 闪烁的东西(或不闪烁的东西)取决于平台/控制台将在控制台的末端,反对它的顶部。 但是,这绝不应该引起任何麻烦。

Interesting Posts