如何从cout回滚线?

Mis*_*ère 10 c++ cout

我正在编写一个任务监控,它使用cout更新任务的进度.我想在每行显示一个任务进度,因此我必须回滚几行控制台.

我坚持"几个"因为\b一行的工作,但不删除\n行之间.

我试过std::cout.seekp(std::cout.tellp() - str.length());tellp()返回-1(失败).

pts*_*pts 20

您可以cout << '\r';跳转到当前行的开头,但向上移动是特定于系统的.对于Unix,请参阅man termcapman terminfo(并搜索cursor_up).在ANSI兼容的终端(例如Unix上可用的大多数现代终端)上,这可以向上移动:cout << "\e[A";.

不要尝试进入cout,大多数时候都无法搜索(除非重定向到文件).

正如其他答案中所提到的,使用ncurses(或slang)库为Unix上的终端I/O提供了一个很好的抽象.

而不是填充空格(这是容易出错的,因为不是每个终端都是80个字符宽),你可以做\r+ clr_eol: std::cout << "\r\e[K" << std::flush.

  • 我也需要 `&lt;&lt; std::flush` 以交互方式显示。 (2认同)

You*_*You 8

如果可以,使用输出格式库,如ncurses ; 这显着简化了终端操作.


Nik*_*sov 5

C和C++都没有定义这样的东西.您需要明确的终端操作.在Unix上你可以使用curses.不知道Windows的用途是什么.