Вы можете сделать несколько простых вещей, просто напечатав символы возврата на обратную сторону '\b'
и возврат каретки '\r'
(без перевода строки). Backspace перемещает курсор назад на один символ, позволяя перезаписать вывод, а возврат каретки возвращает курсор назад к началу текущей строки, позволяя перезаписать текущую строку.
Вот простой пример индикатора выполнения:
int progress = 0;
while(progress < 100)
{
// Note the carriage return at the start of the string and the lack of a
// newline
printf("\rProgress: %d%%", progress);
fflush(stdout);
// Do some work, and compute the new progress (0-100)
progress = do_some_work();
}
printf("\nDone\n");
Обратите внимание, что вы должны делать это только в том случае, если вы пишете на реальный терминал (а не перенаправляетесь в файл или канал). Вы можете проверить это с помощью if(isatty(fileno(stdout)) { ... }
. Конечно, то же самое было бы верно, если бы вы использовали любую другую библиотеку, такую как curses или ncurses.