2010-06-16 12 views
16

Estoy escribiendo una herramienta de línea de comandos para Mac OS X que procesa un grupo de archivos. Me gustaría mostrarle al usuario el archivo actual que se está procesando, pero no quiero que un millón de archivos contaminen la ventana de la terminal.Rebobinar std :: cout para volver al comienzo de una línea

En su lugar, me gustaría usar una sola línea para generar la ruta del archivo, luego reutilizar esa línea para el siguiente archivo. ¿Hay un personaje (u otro código) para enviar a std::cout para lograr esto?

Además, si quisiera volver a enfocar esta herramienta para Windows, ¿la solución sería la misma para ambas plataformas?

Respuesta

16

"\ r" debe trabajar para Windows y Mac OS X.

Algo así como:

std::cout << "will not see this\rwill see this" << std::flush; 
std::cout << std::endl; // all done 
+1

... y Linux, y casi todo lo demás. Creo que la única plataforma en la que teóricamente se puede encontrar que no manejará esto correctamente es la versión anterior a X de Mac OS. –

+0

Eso realmente se imprimirá "" verá esto " – Algoman

1

que no tienen acceso a un Mac, pero desde el punto de vista de la consola pura, esto va a depender en gran medida de cómo trate los caracteres de retorno de carro y avance de línea. Si puede enviar literalmente uno u otro a la consola, desea enviar solo un retorno de carro.

Estoy bastante seguro de que Mac trata los retornos de carro y las alimentaciones de línea de forma diferente que las ventanas * nix &.

Si está buscando actualizaciones in situ (por ejemplo, sobrescribe la línea actual), le recomiendo que consulte la curses lib. Esto debería proporcionar una plataforma independiente de medios para hacer lo que está buscando. (porque, incluso utilizando C++ estándar, no hay medios independientes de plataforma de lo que está pidiendo).

+0

Mac _uso_ para tratar CR de forma diferente a Win/Unix en el día en que no era Unix. Pero ahora lo es, y ese problema se ha ido. –

-2

std :: cout Intérpretes "\ r" como el regreso al beguining de la línea, si no whant a añadir "< < endl" cada vez, utiliza "\ n"

std::cout << "this will work!\nSee... a new line!" << std::endl;

+0

\ n no se cruza -plataforma compatible (lo que Fbrereto había pedido) ventanas solo mueve el cursor una línea hacia abajo y permanece en la misma columna, cuando imprime \ n en lugar de \ r \ n – Algoman

Cuestiones relacionadas