我正在尝试为加载栏设置动画。
通过执行以下操作,它在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中删除输出控制台行?
答案 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;