C удалить вывод printf - PullRequest
       17

C удалить вывод printf

5 голосов
/ 07 февраля 2012

Я хотел бы создать небольшую функцию, которая должна отображать текущее состояние в процентах в консоли. Функция должна показывать только текущее значение в строке. Поэтому я должен удалить последний вывод. Это возможно? В лучшем случае это будет ANSI C, программа должна работать на Linux и Windows.

Я нашел несколько escape-последовательностей, таких как "\033[J", но это не работает.

Редактировать

Ну, я попробовал это с:

void PrintProcessBar(int i, int n) {
    float ratio = i / (float)n;    
    printf("%.3d\b\b", (int)(ratio * 100));
    fflush(stdout);
}

Но он просто печатает много нулей ... Что пошло не так? Если я использую три \b, я ничего не получу.

Решение

float ratio = (i / (float)n) * 100;
printf("\b\b\b\b");
fflush(stdout);
printf("%.3d%c", (int)ratio, 37);        
fflush(stdout);

i = текущая позиция. n = макс. пробеги.

Я использую 4 \b, потому что при первом вызове функции он удалит 4 пробела.

Greetz.

Ответы [ 2 ]

13 голосов
/ 07 февраля 2012

\b - escape-последовательность для возврата. Вы можете использовать его с пробелами для удаления строки.

Например:

printf("98%");
fflush(stdout);
// sleep some time
printf("\b\b\b99%");
fflush(stdout);

Это должно напечатать 98%, а затем заменить его на 99%.

6 голосов
/ 07 февраля 2012

То, что вы ищете, это \r это возврат каретки.Заставляет карету вернуться к началу строки. Не используйте \n, так как он будет идти вниз на одну строку.

Поскольку \ r не удаляет текст, а просто позволяет перезаписать, вы должны убедиться, что вы печатаете достаточно текста (пробелы, если вам нужно), чтобы очистить линию.

...