【问题标题】:How to replace already-printed text in the command prompt?如何在命令提示符下替换已打印的文本?
【发布时间】:2011-08-28 15:48:33
【问题描述】:

我经常看到基于文本的程序替换已打印的文本。例如,想象一个程序,其中进度打印为

Loading: 5%

然后它说

Loading: 10%

等等,没有打印被附加的新文本?

这是怎么做到的?我还没有在库中看到任何可用的此类函数(在本例中为 C)。不过,我有一个想法:您可以编写一个字符,它将提示返回到当前行的开头(我相信\r)。这可以用来“覆盖”您已经打印到命令提示符的内容吗?

【问题讨论】:

  • 使用printf \r 是要走的路。更复杂的是curses库的使用。
  • @George Kastrinis:不,还没有,但我现在会。 ^

标签: c text command-prompt


【解决方案1】:

在大多数控制台中,写一个没有换行符的空回车\r 会将光标返回到当前行的开头,从而允许您覆盖现有文本。写入退格字符\b 也会将光标向后移动一个字符。

对于简单的行为,例如进度指示器,这就是您所需要的。对于更复杂的行为,需要通过非标准的方式来控制终端。在基于 Unix 的系统上,可以使用 ncurses 库——它让您可以完全控制光标位置、文本颜色、键盘回显、更细粒度的键盘输入等等。

在 Windows 上,有一个 suite of functions 用于操作控制台,它们可以做与 Unix 控制台大致相同的事情。

【讨论】:

    【解决方案2】:

    我见过的一种方法是多次打印退格字符,然后用新文本替换您删除的任何内容。

    退格字符是由\b表示的ASCII控制字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多