Terminal ANSI转义码ESC[0E无法按预期工作

Terminal ANSI转义码ESC[0E无法按预期工作,terminal,ansi-escape,Terminal,Ansi Escape,我正在尝试中的示例代码 将在同一行上更新三次,结果如下: [==============================] 100% 3秒后 当每个进度条按预期被擦除时,下一个进度条将向下绘制一行,而不是在我预期的同一行上 答案()中链接的文档说明CSI n E(ESC[nE),其中n是一个整数: 将光标向下移动到第n行(默认为1)的开头 因此,我希望csi0e(ESC[0E)将光标移动到当前行的开头(行0向下) 为什么不呢?还有,我怎样才能达到预期的行为 我正在使用OS X上的Termin

我正在尝试中的示例代码

将在同一行上更新三次,结果如下:

[==============================] 100%
3秒后

当每个进度条按预期被擦除时,下一个进度条将向下绘制一行,而不是在我预期的同一行上

答案()中链接的文档说明
CSI n E
ESC[nE
),其中
n
是一个整数:

将光标向下移动到第n行(默认为1)的开头

因此,我希望
csi0e
ESC[0E
)将光标移动到当前行的开头(行
0
向下)

为什么不呢?还有,我怎样才能达到预期的行为


我正在使用OS X上的
Terminal.app
运行此程序。

嗯,请尝试:

std::cout << "\r";

std::没问题!谢谢。不过我还是想知道为什么
“\x1B[0E”
不起作用。@拟人化我的最佳猜测是
1
——向下移动的默认行数——是可能的最小行数。毕竟,有一个ANSI转义代码来完成您正在做的事情,但用一种更简单的方式——
\x[F
[
不是有效的十六进制字符。你是说
\x1B[F
?我尝试了
\1B[F
,结果是游标重新定位到终端最顶行的开头。嗯。它说应该让它转到行的开头。可能尝试
\033[0E
?只是玩转义序列,我真的不知道它是否有效。
[==============================] 100%
std::cout << "\r";
std::cout << "\x1B[2K"; // Erase the entire current line.
std::cout << "\x1B[0E"; // Move to the beginning of the current line.