在UNIX中输出退格字符

时间:2013-06-01 19:47:54

标签: c++ unix escaping unicode-escapes

我正在尝试为加载栏设置动画。

通过执行以下操作,它在Windows中完全正常:

    for(int j=0; j<currentSize; ++j)
      cout<<static_cast<char>(219);
    for(int k=maxSize; k>=currentSize; k--)
      cout<<static_cast<char>(177);
    ...
    for(int l = 0; l<maxBarSize; l++){
      cout<<'\b';

但是,当我在UNIX中尝试时,退格命令不起作用。它不会删除或打印任何内容。我也尝试使用'^H'的{​​{1}}内容。

是否无法在UNIX中删除输出控制台行?

2 个答案:

答案 0 :(得分:3)

您是否尝试过打印[backspace][space][backspace]?这将在您要删除的角色上方打印一个空格。

如果这不起作用,我怀疑问题不在于您的代码,而在于您的终端模拟器(xterm等)。有些支持像backspace,有些则没有,(有些支持可配置)。

Aso,Elazar提出comment致电cout.flush()。这是因为大多数情况下,stdout 行缓冲。这意味着库将缓冲写入stdout的所有数据,直到遇到换行符,此时缓冲区将刷新到实际的文件描述符。通过调用flush(),您强制将输出缓冲区立即写入文件(TTY)。

答案 1 :(得分:3)

打印\b^h就是这样:它将打印&#34;打印&#34;那些人物。它没有执行&#34;返回删除&#34;操作,这是TTY程序作为键盘输入响应的操作。您在输出中没有看到它们,因为它们不是可见字符。他们改变了光标位置。如果你打印:

Hello, World!\b\b\b\b\b\bEarth!

如果您将输出发送到文件,您将看到所有这些字符。但在终端上,它可能看起来像:

Hello, Earth!

&#34;世界!&#34;字符仍在那里,只是被地球覆盖了!&#34;