Как обновить печатное сообщение в терминале без переиздания

В C Вы получаете неявное преобразование от void* до любого другого (данные) указатель.

40
задан jww 26 March 2019 в 02:30
поделиться

6 ответов

попробуйте использовать \ r вместо \ n при печати новой «версии».

for(int i=0;i<=100;++i) printf("\r[%3d%%]",i);
printf("\n");
45
ответ дан 27 November 2019 в 01:40
поделиться

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

NCurses

11
ответ дан 27 November 2019 в 01:40
поделиться

Примерно так:

std::stringstream out;
for (int i = 0; i< 10; i++)
{
  out << "X";
  cout << "\r" << "[" << out.str() << "]";
}

Скрытый бит - это символ возврата каретки "\ r", который заставляет курсор перемещаться в начало строки без перехода до следующей строки.

7
ответ дан 27 November 2019 в 01:40
поделиться

'\ r' выполнит возврат каретки. Представьте, что принтер выполняет возврат каретки без перевода строки ('\ n'). Это вернет точку записи обратно в начало строки ... затем повторно напечатает ваш обновленный статус поверх исходной строки.

1
ответ дан 27 November 2019 в 01:40
поделиться

Другой вариант - просто печатать по одному символу за раз. Обычно stdout буферизируется по строке, поэтому вам нужно вызвать fflush (stdout) -

for(int i = 0; i < 50; ++i) {
   putchar('X'); fflush(stdout);
   /* do some stuff here */
}
putchar('\n');

Но здесь нет красивого завершающего символа «]», указывающего на завершение.

1
ответ дан 27 November 2019 в 01:40
поделиться

Это другой язык, но этот вопрос может вам помочь. По сути, escape-символ \ r (возврат каретки, в отличие от \ n новой строки) перемещает вас обратно в начало вашей текущей напечатанной строки, чтобы вы могли перезаписать то, что вы уже напечатали.

1
ответ дан 27 November 2019 в 01:40
поделиться
Другие вопросы по тегам:

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