URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3932
[ Назад ]

Исходное сообщение
"Печать на одной и той же строке (прогресс)"

Отправлено victorddt , 09-Фев-05 11:24 
Идет какая-то обработка, надо писать прогресс выполнения в %:
1%
2%
3%
и т.д.

Как выводить все это на одной и той же строке.

Смотрел функции:
fprintf   -  пишет литеры в поток fp.
printf    -  пишет литеры в поток stdout.
sprintf   -  пишет литеры в память buffer.


Но не нашел. Может какой флаг использовать. Или вообще функция другая?
Спасибо.


Содержание

Сообщения в этом обсуждении
"Печать на одной и той же строке (прогресс)"
Отправлено hatta , 09-Фев-05 20:05 
>Идет какая-то обработка, надо писать прогресс выполнения в %:
>1%
>2%
>3%
>и т.д.
>
>Как выводить все это на одной и той же строке.

символ \r -- возврат каретки в начало строки.
printf("\r%d%%", procent) сделает то что нужно


"Печать на одной и той же строке (прогресс)"
Отправлено Xenu , 09-Фев-05 22:29 
тут надо write и snprintf использовать, примерно вот так

char buf[10] = "";
snprintf(buf, 9, "\r% 3d%%", количество процентов);
write(1, buf, strlen(buf));


"Печать на одной и той же строке (прогресс)"
Отправлено victorddt , 10-Фев-05 08:41 

Спасибо, Всем попробую.

"Печать на одной и той же строке (прогресс)"
Отправлено Alexander S. Salieff , 14-Фев-05 17:27 
>тут надо write и snprintf использовать, примерно вот так
>
>char buf[10] = "";
>snprintf(buf, 9, "\r% 3d%%", количество процентов);
>write(1, buf, strlen(buf));

Одно из отличий write от *printf - отсутствие буфферизации, так что можно и без него:

printf("\r% 3d%%", количество процентов);
fflush(stdout);


"Печать на одной и той же строке (прогресс)"
Отправлено rgo , 21-Фев-05 04:29 
Можно ещё посмотреть
man termcap
man terminfo
man tcgetattr
о том как узнавать другие esc-последовательности