Как откатывать строки из суда?

Я кодирую контроль задачи, который обновляет суд использования прогресса задач. Я хотел бы отобразить один прогресс задачи на строку, поэтому я должен откатывать несколько строк консоли.

Я настаиваю на "нескольких" потому что \b делает задание для одной строки, но не стирается \n между строками.

Я попробовал std::cout.seekp(std::cout.tellp() - str.length()); но tellp() возвраты-1 (отказ).

10
задан Cody Gray 12 February 2016 в 17:29
поделиться

3 ответа

Вы можете выполнить 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 .

20
ответ дан 3 December 2019 в 14:17
поделиться

Используйте библиотеку форматирования вывода, такую ​​как ncurses , если можете; это значительно упрощает манипуляции с терминалом.

8
ответ дан 3 December 2019 в 14:17
поделиться

Ни C, ни C ++ ничего подобного не определяют. Вам нужны явные манипуляции с терминалом. В Unix вы можете использовать curses . Понятия не имею, что там для Windows.

5
ответ дан 3 December 2019 в 14:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: