Это, по сути, два вопроса в одном:
- Как рассчитать процент на основе потока задач
- Как представить расчет
Первое зависит от того, как построена ваша программа, и, вероятно, на нее проще всего ответить, подумав о проблеме в контексте вашей программы. Второе можно сделать множеством способов, самые простые из которых уже были объяснены другими, а именно:
- Использование
\r
для перехода к началу строки
- Использование
\b
x количество раз для перемещения курсора назад
Я использовал третий способ, который еще не был упомянут, это сохранение и восстановление позиции курсора. Это позволяет произвольно перемещать курсор вокруг.
\e[s
сохраняет текущую позицию курсора
\e[u
восстанавливает курсор в эту позицию
Вот пример:
#include <stdio.h>
#include <unistd.h>
int main(int argc, const char *argv[]) {
int i;
int tasks = 25;
printf("Progress:\e[s");
for(i = 0; i < tasks; i++) {
int pct = ((float) i / tasks) * 100;
printf(" %2d (%3d%%)\e[u", i, pct);
fflush(stdout);
sleep(1);
}
return(0);
}
Обратите внимание, что нам все равно, где начало строки: мы только перепечатываем фактический процент . Вы заметите, что позиция курсора теперь видна прямо перед процентом, но вы можете произвольно переместить его куда угодно.
Это решение предполагает, что ваш терминал способен понимать эти команды ANSI, которые могут отличаться от терминала к терминалу. Хотя я думаю, что вышеупомянутый подход является относительно «безопасным», посмотрите на terminfo / ncurses , чтобы узнать больше об этом.
Changelog:
- переписал последний абзац
- Заменил мой первоначальный пример bash на
пример C