好的,我一直在研究如何做到这一点。假设我运行的程序在终端上有很多输出,那么如何从我的程序内部清除屏幕,以便我可以让程序继续运行呢?
我知道我可以在终端中键入clear
并且它可以正常清除,但是像我所说的,对于这个程序,使用其他方法会更有益。
我找到了一些可行的方案,但是我不确定它是什么或者它在做什么。
cout << "\033[2J\033[1;1H";
那个能用,但我不知道它是什么,如果你能解释一下的话,我会非常感激。
\033[2J
)清除整个屏幕(J
)从顶部到底部(2
)。第二个代码(\033[1;1H
)将光标定位在第1
行,第1
列。\033
是转义字符的C风格八进制序列。不要依赖于特定的转义序列,因为它们可能在意想不到的情况下出现问题(尽管如果这是您想要的,接受这种权衡是可以的),您可以执行与在 shell 中执行的相同操作:
std::system("clear");
尽管一般来说应该避免使用 system(),但对于用户交互程序,额外的 shell 解析和进程开销并不重要。在这种情况下,也没有 shell 转义的问题。
如果您确实想要避免使用 system(),那么您始终可以 fork/exec 来调用 clear。如果您已经在使用 [n]curses 或其他终端库,请使用它。
你可以在终端中输入"clear > data",并在data中读取转义序列
0x1B[H0x1B[2J0x1B[3J
因此
std::cout << "\033[H\033[2J\033[3J" ;
<cstdlib>
才能使用std::system。此外,尽管在bash上使用"clear"可以生效,但在Windows命令行中,您需要使用"cls"。 - Mark Peschel