2011-02-13 19 views
13

¿Cuál es la forma más fácil de mostrar los números cambiantes en la consola? Tengo un programa de línea de comandos normal en C++ que usa cout, pero me gustaría mostrar un número de porcentaje que representa el progreso que cuenta hasta 100 sin imprimir una nueva línea. ¿Cómo se hace eso? (Si es importante: estoy en Windows 7) ¡Gracias por tus respuestas!C++ cambio de salida en la consola

+0

¿Quiere decir imprimir y borrar números? – rda3mon

+1

@Ringo: sí. También podría extender esto a la pregunta general: ¿Cómo cambiaría cualquier cosa que haya impreso anteriormente en la consola? Lo que también he visto y encuentro interesante: cambie el color del texto de salida. –

+0

@Nawaz: ¿para qué sirve la etiqueta 'commandline'? –

Respuesta

29

Cuando ’ he necesitado que acabo de salida de un retorno de carro carácter, en C++ \r.

Recuerde enjuagar la salida cada vez, p.

cout << "\r" << x << "% completed.  " << flush; 

Los espacios al final para borrar salida anterior en la línea en caso de progreso que fluctúa entre Microsoft y similares.

enter image description here

11

Use el carácter de retroceso.

cout << "10%"; 
// ... 
cout << "\b\b\b20%"; 
5

normalmente coloco un retorno de carro después de la información de progreso. De esta forma, cualquier otra salida aparecerá normal (siempre que tenga suficientes caracteres en la línea para sobrescribir completamente la información de progreso).

cerr<<percentage<<"% \r"; 

Por cierto, yo prefiero usar cerr en lugar de cout para este tipo de información de estado/diagnóstico de manera que cout puede ser reservado para un contenido real. De esta manera puede redirigir la salida del programa normal a un archivo y aún ver el progreso en la consola. Además, con cerr, no tienes que usar "flush".

+0

Pero difícilmente pasaría un archivo a la compresión de Huffman a través de stdin/stdout, ¿verdad? –

+2

@Felix: ¡Ciertamente lo haría! Pero tal vez no en Windows. Según recuerdo, debe usar llamadas no estándar para indicarle a la versión de Microsoft de la biblioteca de flujos de C++ que no modifique las secuencias "\ r \ n" que podrían ocurrir en su flujo de datos por casualidad. En Linux, este tipo de uso de stdin/stout es muy poderoso y muy común. – nobar

Cuestiones relacionadas