如何使用C ++在Windows和Linux中清除控制台

我需要一个跨平台的解决scheme来清除Linux和Windows中用C ++编写的控制台。 有这个function吗? 另外请注意,我不希望最终用户程序员不得不更改我的程序中的任何代码,以使其在Windows和Linux中清除(例如,如果必须在两个函数之间进行select,则必须做出决定在运行时或在编译时自动)。

简短的回答:你不能。

较长的答案:使用curses库(在Unix上是ncurses,在Windows上是pdcurses )。 NCurses应该可以通过你的包管理器,并且ncurses和pdcurses都有完全相同的接口(pdcurses也可以独立于控制台创建与控制台窗口类似的窗口)。

最难的答案是:使用#ifdef _WIN32和类似的东西,使你的代码在不同的操作系统上有不同的行为。

没有通用命令来清除两个平台上的控制台 。

 #include <cstdlib> void clear_screen() { #ifdef WINDOWS std::system("cls"); #else // Assume POSIX std::system ("clear"); #endif } 

在Linux上可以清除控制台。 最好的方法是将以下转义序列写入标准输出:

 write(1,"\E[H\E[2J",7); 

这是/ usr / bin / clear所做的,而不需要创建另一个进程的开销。

一个简单的窍门:为什么不使用宏来结合使用system()命令来清除控制台来检查操作系统类型? 这样,您将使用适当的控制台命令作为参数执行系统命令。

 #ifdef _WIN32 #define CLEAR "cls" #else //In any other OS #define CLEAR "clear" #endif //And in the point you want to clear the screen: //.... system(CLEAR); //.... 

所发布的问题是无法回答的,因为它提出了不可能的限制。 “清除屏幕”是跨不同操作系统的非常不同的操作,它如何操作系统特定的。 请参阅本“频繁给出的答案 ”,了解如何在具有“终端”的几个流行平台上使用“控制台”和平台进行操作。 你也可以在同一个地方找到一些常见错误的解释,其中有几个是唉! – 以上给出的答案。

这是你如何在任何其他平台上做到这一点,但它不适用于Windows:

 cout << "\f"; 

也许你需要做一个条件编译:

 void clrscr() { #ifdef _WIN32 HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); COORD coord = {0, 0}; DWORD count; CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hStdOut, &csbi); FillConsoleOutputCharacter(hStdOut, ' ', csbi.dwSize.X * csbi.dwSize.Y, coord, &count); SetConsoleCursorPosition(hStdOut, coord); #else cout << "\f"; #endif } 

我知道这不是回答我自己的问题,而是! 这适用于Windows( #include <windows.h> ):

 void clrscr() { HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); COORD coord = {0, 0}; DWORD count; CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hStdOut, &csbi); FillConsoleOutputCharacter(hStdOut, ' ', csbi.dwSize.X * csbi.dwSize.Y, coord, &count); SetConsoleCursorPosition(hStdOut, coord); } 

那么有一个非常接近的清除屏幕的选择。 你可以尝试使用for循环重复新行很多。 例如:

 for (i = 0; i < 100000; i++) { printf ("\n\n\n\n\n"); } 

在你做这个循环之后,终端不能让你回到你最顶层的位置,这是一个非常专业的方法,它具有常识。 它不直接回答你的问题,但它可以工作。

简短的回答

 void cls(void) { system("cls||clear"); return; } 

长答案 ,请阅读:

系统(“暂停”)澄清

这段代码清除了Windows和Unix中的控制台(虽然实际上编译方式不同):

 // File: clear_screen.h #ifndef _CLEAR_SCREEN_H #define _CLEAR_SCREEN_H void clearScreen(void); /* Clears the screen */ #endif /* _CLEAR_SCREEN_H */ 
 // File: clear_screen.c #ifdef _WIN32 #include <windows.h> void clearScreen(void) { HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE); COORD topLeft = {0, 0}; DWORD dwCount, dwSize; CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hOutput, &csbi); dwSize = csbi.dwSize.X * csbi.dwSize.Y; FillConsoleOutputCharacter(hOutput, 0x20, dwSize, topLeft, &dwCount); FillConsoleOutputAttribute(hOutput, 0x07, dwSize, topLeft, &dwCount); SetConsoleCursorPosition(hStdOut, topLeft); } #endif /* _WIN32 */ #ifdef __unix__ #include <stdio.h> void clearScreen(void) { printf("\x1B[2J"); } #endif /* __unix__ */ 

岂不

 for (int i=0;i<1000;i++){cout<<endl;} 

清除所有操作系统中的屏幕?

这应该工作,如果你在控制台上工作

 #include <conio.h> int main() { clrscr(); }