Многие из вас помнят команду format. Вот даешь ей задание, скажем, format C: и наблюдаешь за тем, как ползут проценты. Причем, заметьте, проценты отображаются строго на одной и той же позиции. Достичь такого возможно, устанавливая позицию курсора, печатая число, восстанавливая позицию курсора после всего. Однако, как выставить позицию курсора в общем, кросс-платформенном варианте - я не знаю Для консоли Win32 - нет проблем, там есть специальная функция. Для С CRT, по логике, подошли бы fgetpos, fsetpos, т.е. нечто вида fgetpos(stderr, &pos) однако, функции возвращают мне сообщение об invalid file descriptor... что делать еще - я уже не знаю порылся в гугле - надыбал нечто вида http://mail.gnome.org/archives/mc-devel/2003-February/msg00174.html с забавным макросом: Код (Text): #define cursor_to(x, y) do { \ printf("\x1B[%d;%df", (y) + 1, (x) + 1); \ fflush(stdout); \ } while (0) Смысл понимаю не шибко - какие-то управляющие коды Хак... Словом, кто-то может предложить кросс-платформенное решение для проблемы?
хм а printf("Current progress: %02d%\r", progressPercent); внутри цикла уже не модно ? ну ессно после завершения printf("\n");
нет, не модно. во-первых, такое сожрет до хрена места на экране и сожрет его по глупому, во-вторых, в моем случае я не могу посчитать проценты, т.к. я наперед не знаю, сколько строчек в файле я встречу.
volodya Если %% можно отображать в последней строке то можно сделать так: Код (Text): for(int i=0;i<=100;i++) printf("\rformat %c:, %3d%% complete ...",'C',i); Иными словами выводить всю строку заново вернув курсор в её начало.
управляющие коды можно посмотреть, скажем вот здесь: http://www.ascii.cl/control-characters.htm скажем, чтобы печатать проценты в одном и том же месте, достаточно в цикле выводить 2 символа: "00"-"99" и после добавлять 2 управляющих кода с кодом 8 т.е.: Код (Text): printf ("%02i\x08\x08", iPercent); для кода 8 есть и escape готовая: "\b".. для остальных надо читать, но сам принцип думаю понятен
volodya, "неработающий" макрос - это одна из ANSI-шных ESC-последовательностей. Макрос работает, например, в DOS-е, если установлен драйвер ansi.sys.