2010-03-05 31 views
8

Quiero imprimir hora actual (mediante el uso de printf) en mismo lugar, pero quiero hacerlo en bucle infinito por ejemplo:C moviendo el cursor al principio de la línea actual

while(1) {printf("Date and Time are %s", asctime(localtime(&current))); } 

. Entonces, antes de usar printf, debería mover el cursor hacia atrás a su posición de observación. Cómo hacerlo ?

THX de antemano

Respuesta

0

Podría funcionar para imprimir un "\ r" al inicio de la línea.

6

escribir \ r

while(1) { 
printf("\rDate and Time are %s  ", asctime(localtime(&current))); 
fflush(stdout); 
} 
+0

Sí, lo intenté y funciona. – ardsrk

3

Usted puede hacerlo de esta manera (ver el \ r con muchos espacios!):

while(1) { 
    printf("Date and Time are %s\r   ", asctime(localtime(&current))); 
    fflush(stdout); 
} 
6

Para simplemente moviendo el cursor al comienzo de la línea actual, puede imprimir "\ r", que hace precisamente eso. Tenga en cuenta que no borra el texto anterior, así que tenga cuidado de sobrescribirlo o borrarlo con un código ANSI.

En los sistemas que utilizan códigos de control ANSI/VT, puede imprimir "\ 033 [1; 2H" para colocar el cursor. Moverá el cursor y no imprimirá nada en la pantalla. Los valores 1 y 2 son la fila y la columna, así que cámbielas para usar diferentes posiciones.

También hay otros códigos de colores y otras cosas: http://bluesock.org/~willg/dev/ansi.html

en cuenta que ninguno de estos códigos son portátiles y puede no funcionar en todos los sistemas (en particular, que no funcionan por defecto en algunos sistemas Microsoft) Los sistemas que no son compatibles mostrarán algo de basura en la pantalla (el código mismo).

+0

Gran respuesta, mucho más completa que otras. – Josh

+0

¿Sabe cómo aumentar el número de fila en el bucle, por ejemplo: para (i = 1; i <10; i ++) {printf ("\ 033 [i; 1H texto en la fila% d, i); } (it no funciona, entonces ¿debería escpapear 'yo'? o tal vez es otra forma de hacerlo? ? – JosiP

Cuestiones relacionadas