Я кодирую контроль задачи, который обновляет суд использования прогресса задач. Я хотел бы отобразить один прогресс задачи на строку, поэтому я должен откатывать несколько строк консоли.
Я настаиваю на "нескольких" потому что \b
делает задание для одной строки, но не стирается \n
между строками.
Я попробовал std::cout.seekp(std::cout.tellp() - str.length());
но tellp()
возвраты-1 (отказ).
Вы можете выполнить cout << '\ r';
, чтобы перейти к началу текущей строки, но перемещение вверх зависит от системы. Для Unix см. man termcap
и man terminfo
(и найдите cursor_up
). На ANSI-совместимых терминалах (таких как большинство современных терминалов, доступных в Unix) это работает, чтобы двигаться вверх: cout << "\ e [A";
.
Не пытайтесь искать в cout
, его невозможно найти большую часть времени (кроме случаев перенаправления в файл).
Как упоминалось в других ответах, использование библиотеки ncurses (или сленг ) обеспечивает хорошую абстракцию для терминального ввода-вывода в Unix.
Вместо заполнения пробелами (что подвержено ошибкам, поскольку не каждый терминал имеет ширину 80 символов), вы можете использовать \ r
+ clr_eol
: std: : cout << "\ r \ e [K" << std :: flush
.
Используйте библиотеку форматирования вывода, такую как ncurses , если можете; это значительно упрощает манипуляции с терминалом.
Ни C, ни C ++ ничего подобного не определяют. Вам нужны явные манипуляции с терминалом. В Unix вы можете использовать curses . Понятия не имею, что там для Windows.