Отображение прогресса в командной строке

Хорошо, я немного смущен, чтобы задавать такую ​​простую вещь, но все же.

У меня есть приложение командной строки и нужно показать прогресс пользователю.

Я мог бы написать прогресс в cout, например:

std::cout << "10%\n";
...
std::cout << "20%\n";
...
std::cout << "30%\n";

... но в результате пользователь увидит:

some line printed before
10%
20%
30%
...

... но мне действительно нужно, чтобы этот процент получил обновленный, как в начале:

some line printed before
10%
...

... и после обновления:

some line printed before
20%
...

... и после второго обновления:

some line printed before
30%
...

Как мне это достичь?

Ответы

Ответ 1

Вместо '\n' используйте '\r':

std::cout << "\r10%" << std::flush;

Распечатайте новую строку ('\n') по завершении.

Важно использовать std::flush, поэтому содержимое потока действительно выводится.

Ответ 2

Используйте возврат каретки.

std::cout << "\r10%";
std::cout << "\r20%";
...

Переход к началу строки.