c++ - 如何从 cout 回滚行?

标签 c++ cout

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

我坚持使用“多个”,因为 \b 完成一行的工作,但不会删除行与行之间的 \n

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

最佳答案

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

不要尝试在 cout 中寻找,它在大多数情况下是不可搜索的(重定向到文件时除外)。

如其他答案中所述,使用 ncurses(或 slang)库为 Unix 上的终端 I/O 提供了良好的抽象。

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

关于c++ - 如何从 cout 回滚行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3277058/

相关文章:

c++ - 使用 Ncurses (C++) 时不打印宽字符

c++ - 返回指向类成员的指针——我应该避免它吗?

c++ - 在 C++ 中,如何计算出具有许多特殊字符的 Logo ?

c++ - 使用功能时控制台上出现白色区域?

c++ - 使用 std::getline c++ 函数时遇到问题

c++ - SS_NOTIFY 和 WM_SETCURSOR

c++ - 不同机器之间标准时钟的显着性能差异

c++ - 对 map 元素执行二分搜索

C++ cout 字符串打印其内存值

C++:多项式矩阵的输出