Модификация текста в терминале - PullRequest
3 голосов
/ 05 августа 2011

Можно ли изменить текст, напечатанный на терминале, без очистки экрана?

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

Talking C ++.

спасибо

Ответы [ 4 ]

5 голосов
/ 05 августа 2011

Есть несколько способов сделать это, и в зависимости от того, сколько усилий вы хотите приложить к этому, вы можете сделать много интересных вещей с текстом ascii в окне терминала.

  1. Дополнительно: Библиотека ncurses

  2. Проще: escape-символы ANSI с printf или cout

  3. Самый простой: как уже говорили другие, просто используйте \r для возврата каретки без перевода строки.

Редактировать: пример использования последовательности ESC для возврата двух символов:

#include <iostream>
#define ESC char(0x1B)

int main(){
  std::cout << "This will overwrite 'rs' in the following: characters" << ESC << "[2D" << "xx" << std::endl;
  return 0;
}
3 голосов
/ 05 августа 2011

Очень простой способ сделать это - распечатать строку, за которой следует символ '\ r'.Это возврат каретки сам по себе, и на большинстве консолей он возвращает курсор в начало строки, не перемещаясь вниз.Это позволяет вам перезаписать текущую строку.

Если вы пишете в stdout или cout или clog, не забудьте fflush или std :: flush поток, чтобы он немедленно выводил строку.Если вы пишете в stderr или cerr, тогда поток небуферизован, и весь вывод является немедленным (и неэффективным).

Более сложный способ сделать это - использовать библиотеку экранных рисунков, таких как curses.

1 голос
/ 05 августа 2011

Вы можете использовать символ "\ r", чтобы вернуться к первому символу этой строки:

for(int i = 0; i < 60; i++){ cout << "\rValue of i: " << i;}

Имейте в виду, чтобы НЕ ставить конечную строку (endl или '\ n ') в конце вашего вывода, или вы просто будете каждый раз переходить к началу новой строки, теряя нужный эффект.

1 голос
/ 05 августа 2011

В системах Linux проверьте пакет ncurses. Этот пакет обеспечивает поддержку перемещения курсора на большинстве терминалов.

...