Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Belial & Grimoire en 13 Mayo 2013, 04:33 am



Título: como puedo imprimir con printf sin que se repita tanto por while?
Publicado por: Belial & Grimoire en 13 Mayo 2013, 04:33 am
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

Código
  1. while(i < tam){
  2.  
  3. leido = fread(bu, sizeof(char), 256, fb);
  4. envio = send(newfd, bu, leido, 0);
  5. i = i + leido;
  6. printf("Enviando-- %ld bytes\n", i);
  7. }


si hago esto me aparece

Código:
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

Código:
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

Código:
Enviando-- 2%   3753472 / 74021921bytes


EDITADO

P.D. lo estoy haciendo en linux

salu2


Título: Re: como puedo imprimir con printf sin que se repita tanto por while?
Publicado por: capsulasinformaticas en 13 Mayo 2013, 06:40 am
Si lo quieres hacer estandar, saca el '\n' al final de la cadena y pon un '\r' al principio, con eso deberia bastar.


Título: Re: como puedo imprimir con printf sin que se repita tanto por while?
Publicado por: 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


Título: Re: como puedo imprimir con printf sin que se repita tanto por while?
Publicado por: capsulasinformaticas en 13 Mayo 2013, 07:52 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.


Título: Re: como puedo imprimir con printf sin que se repita tanto por while?
Publicado por: 0xDani en 13 Mayo 2013, 16:39 pm
Pues borras la pantalla en cada iteración del bucle, la forma rápida es esta:

Código
  1. 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.


Título: Re: como puedo imprimir con printf sin que se repita tanto por while?
Publicado por: 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...

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



Título: Re: como puedo imprimir con printf sin que se repita tanto por while?
Publicado por: mr.blood en 13 Mayo 2013, 19:34 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


Título: Re: como puedo imprimir con printf sin que se repita tanto por while?
Publicado por: WHK en 13 Mayo 2013, 20:11 pm
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.