我需要一个跨平台的解决方案来清除用C++编写的Linux和Windows控制台.这样做有什么功能吗?另请注意,我不希望最终用户程序员必须更改程序中的任何代码以使其清除Windows vs Linux(例如,如果必须在两个函数之间进行选择,则必须做出决定在运行时或在编译时自动执行).
在两个平台上都没有通用命令来清除控制台.
#includevoid clear_screen() { #ifdef WINDOWS std::system("cls"); #else // Assume POSIX std::system ("clear"); #endif }
简短的回答:你做不到.
更长的答案:使用curses库(Unix 上的ncurses,Windows 上的pdcurses).NCurses应该可以通过你的包管理器获得,并且ncurses和pdcurses都具有完全相同的接口(pdcurses也可以独立于控制台创建窗口,其行为类似于控制台窗口).
最困难的答案:使用#ifdef _WIN32
和类似的东西使你的代码在不同的操作系统上采取不同的行为.
在linux上,可以清除控制台.最好的方法是将以下转义序列写入stdout:
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); //....