como puedo imprimir con printf sin que se repita tanto por while?

Iniciado por Belial & Grimoire, 13 Mayo 2013, 04:33 AM

0 Miembros y 1 Visitante están viendo este tema.

Belial & Grimoire

hola

alguien sabe como podria hacer para que un programa, al hacer la transferencia de archivos, me marque una cantidad sin repetir todo el printf varias veces por while

por ejemplo

while(i < tam){

leido = fread(bu, sizeof(char), 256, fb);
envio = send(newfd, bu, leido, 0);
i = i + leido;
printf("Enviando-- %ld bytes\n", i);
}



si hago esto me aparece


Enviando-- 3753472 bytes
Enviando-- 3753728 bytes
Enviando-- 3753984 bytes
Enviando-- 3754240 bytes
Enviando-- 3754496 bytes
Enviando-- 3754752 bytes
Enviando-- 3755008 bytes
Enviando-- 3755264 bytes
Enviando-- 3755520 bytes
Enviando-- 3755776 bytes
Enviando-- 3756032 bytes
Enviando-- 3756288 bytes
Enviando-- 3756544 bytes
Enviando-- 3756800 bytes
Enviando-- 3757056 bytes
Enviando-- 3757312 bytes



pero me gustaria que no se moviera, que aparezca estatico y solo se vaya aumentando los numeros poco a poco


Enviando-- 3753472 bytes



alguien tiene alguna idea de como podria hacer para que solo aumente la cantidad y no se repita tanto el printf como arriba?, porque me gustaria poner un porcentaje y la cantidad exacta algo asi


Enviando-- 2%   3753472 / 74021921bytes



EDITADO

P.D. lo estoy haciendo en linux

salu2
.                                 

capsulasinformaticas

#1
Si lo quieres hacer estandar, saca el '\n' al final de la cadena y pon un '\r' al principio, con eso deberia bastar.

Luna71c0

Si piensa hacer una aplicación de consola porque no simplemente borras la pantalla ?

por cierto es "envio", no "enbio" :P

Citar
Un pequeño paso para el programador....
Un gran paso para el hacker...

...]LunaHAck[...


i'm the "Luna71c0"

capsulasinformaticas

#3
Cita de: Luna71c0 en 13 Mayo 2013, 07:26 AM
Si piensa hacer una aplicación de consola porque no simplemente borras la pantalla ?

por cierto es "envio", no "enbio" :P

Bueno tambien esta esa opcion pero me gusta mas lo estandar xD, si lo quieres hacer con un limpiado de pantalla puedes hacer cout << "\E[H\E[2J"; en Linux (o sistemas Unix), o system("cls"); en Windows.

Pd: Creo que para system("cls"); es necesario la libreria ctdlib o stdlib.h, no estoy seguro.

0xDani

Pues borras la pantalla en cada iteración del bucle, la forma rápida es esta:

system("clear");

La forma elegante, no sé ahora mismo, pero supongo que pasaría por usar termios o ioctl.

Y en cuanto al porcentaje:

Obtienes el tamaño del archivo, y con eso haces el porcentaje, luego lo muestras por pantalla.

Saludos.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Belial & Grimoire

hola

gracias por las respuestas

hice lo de system()... pero no gusto como se limpia toda la pantalla...

Citar
Luna71c0

jajaja cierto... lo puse con "b"  :P, corregido

lo intente con "\r" y le agregue fflush(stdout) y funciono... se queda statico... a veces parpadea pero bueno, no creo que importe mucho..

gracias de nuevo

.                                 

mr.blood

Cita de: Belial & Grimoire en 13 Mayo 2013, 19:21 PM
hola

gracias por las respuestas

hice lo de system()... pero no gusto como se limpia toda la pantalla...

lo intente con "\r" y le agregue fflush(stdout) y funciono... se queda statico... a veces parpadea pero bueno, no creo que importe mucho..

gracias de nuevo



Nunca se deja de aprender ;). Muy  buen tip.

Sa1uDoS

WHK

saca la longitud de carácteres del valor del porcentaje y luego lo vas borrando con \b, es mucho mas efectivo porque no necesitas borrar la linea completa y no parpadea todo el texto, solo se borra el valor, la consola redenderiza mas rápido, por lo tanto tu aplicación también se vuelve mas rápida.

Por ejemplo
\b1
\b2
\b3
\b10
\b\b11
\b\b12
\b\b50
\b\b100

Y funciona en todos los sistemas operativos siempre y cuando uses printf.