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

yxk*_*yxk 26 c++ linux windows console cross-platform

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

fms*_*msf 53

在两个平台上都没有通用命令来清除控制台.

#include <cstdlib>

void clear_screen()
{
#ifdef WINDOWS
    std::system("cls");
#else
    // Assume POSIX
    std::system ("clear");
#endif
}
Run Code Online (Sandbox Code Playgroud)

  • 这是最简洁,通用的答案,在99%的案例中都有效.应该是接受的答案. (5认同)

cop*_*pro 28

简短的回答:你做不到.

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

最困难的答案:使用#ifdef _WIN32和类似的东西使你的代码在不同的操作系统上采取不同的行为.


Nic*_*lli 13

在linux上,可以清除控制台.最好的方法是将以下转义序列写入stdout:

write(1,"\E[H\E[2J",7);
Run Code Online (Sandbox Code Playgroud)

这是/ usr/bin/clear所做的,没有创建另一个进程的开销.

  • 要清楚:<ESC> [H将光标移动到屏幕的左上角<ESC> [2J擦除屏幕任何想要更多细节的人都应该谷歌"ANSI转义序列". (7认同)

小智 10

一个简单的技巧:为什么不使用宏结合使用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);
//....
Run Code Online (Sandbox Code Playgroud)


Dr *_*eco 6

简答

void cls(void)
{
    system("cls||clear");
    return;
}
Run Code Online (Sandbox Code Playgroud)

长答案,请阅读:

系统(“暂停”)说明