2012-02-07 10 views
5

Me gustaría crear una función pequeña, que debe mostrar el estado actual en porcentaje en la consola. La función solo debe mostrar el valor actual en la línea. Así que tengo que eliminar la última salida. ¿Es eso posible? El mejor caso sería algo de ANSI C, el programa debería funcionar en Linux y Windows.C eliminar la salida de impresión

He encontrado algunas secuencias de escape como "\033[J", pero la dosis no funciona.

Editar

Bueno he probado con:

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

Pero simplemente imprimir un montón de ceros ... ¿Qué salió mal? Si uso tres \b, no recibo nada.

Solución

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

i = posición actual. n = max runs.

Uso 4 \b porque, en la primera llamada de la función eliminará 4 espacios.

Greetz.

+1

Las respuestas deben mantenerse separadas de las preguntas. Si desea responder su propia pregunta, puede hacerlo haciendo clic en el botón [Responder su pregunta] en la parte inferior de esta página. – brandaemon

Respuesta

10

\b es la secuencia de escape para el retroceso. puedes usarlo con espacios para borrar una línea.

Por ejemplo:

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

Esto debería imprimir 98%, y luego sustituirlo por 99%.

+0

Bien, lo he intentado, pero algo salió mal. Por favor, mira mi ** Edición **. Gracias. Greetz. – hofmeister

+0

Está imprimiendo tres caracteres, pero solo devuelve dos cada vez, probablemente necesite devolver la misma cantidad de la impresión (otro \ b debería funcionar). – MByD

+0

Escribí eso, si uso tres '\ b'' printf' no imprimirá nada. – hofmeister

6

Lo que busca es \r es Carriage Return. Hace que el carro regrese al comienzo de la línea. No use \n ya que bajará una línea.

Como \ r no elimina texto pero simplemente le permite sobrescribirlo, debe asegurarse de imprimir suficiente texto (espacios si es necesario) para borrar la línea.

+0

Oh, ¿eso no depende del sistema? –

+0

La línea final depende del sistema ('\ n' para Linux y Mac,' \ r \ n' para windows, '\ n \ r' para" Acorn BBC y salida de texto en cola del sistema operativo RISC "y' \ r' para Commodore Máquinas de 8 bits, Acorn BBC, TRS-80, familia Apple II, Mac OS hasta la versión 9 y OS-9 [fuente] (http://en.wikipedia.org/wiki/Newline)) – Eregrith

+0

Así que usted tiene un problema haciendo \ r en Mac OS hasta 9 – Eregrith

Cuestiones relacionadas