使用C++代码清除Linux中的终端

Joh*_*ohn 33 c++ linux terminal

好吧,我一直在研究如何做到这一点,但说我运行具有终端输出的全位的程序,我将如何清除屏幕从我的计划之内,这样我可以保持我的程序运行?

我知道我可以只输入clear端子,它会清除它很好,但就像我说的,这个程序将是对我来说更有益.

我发现了一些有效的东西,但是,我不确定它是什么或者它在做什么.

cout << "\033[2J\033[1;1H";
Run Code Online (Sandbox Code Playgroud)

这是有效的,但我不知道它是什么,如果你能解释它,我会非常感激.

Mar*_*tos 49

这些是ANSI转义码.第一个(\033[2J)J从上到下(2)清除整个屏幕().第二个代码(\033[1;1H)将光标定位在行1,列1.

所有ANSI转义开始序列ESC[,具有通过分隔零个或多个参数;,并用命令字母结尾(JH你的情况).\033是转义字符的C风格八进制序列.

这里为全路演.


小智 11

而不是依赖于在意外情况下可能会破坏的特定转义序列(虽然接受权衡很好,如果它是你想要的),你可以在shell上做同样的事情:

std::system("clear");
Run Code Online (Sandbox Code Playgroud)

虽然通常要避免使用system(),但对于用户交互式程序来说,额外的shell解析和进程开销都不重要.在这种情况下,shell转义也没有问题.

如果你想避免使用system(),你总是可以fork/exec来调用clear.如果您已经使用[n] curses或其他终端库,请使用它.

  • 请注意,在 C++ 中,您需要`#include &lt;cstdlib&gt;` 才能使用 std::system。此外,尽管“clear”适用于 bash,但对于 Windows 命令行,您需要“cls”。 (4认同)