2011-12-30 31 views
12

que estaba buscando un sustituto de gotoxy() para el compilador gcc y encontramos este -gotoxy() para Linux usando printf

void gotoxy(int x,int y) 
{ 
    printf("%c[%d;%df",0x1B,y,x); 
} 

Quiero saber cómo está funcionando, quiero decir cuando usamos [ y ; dentro de printf, ¿qué está haciendo 0x1B allí y cómo lleva el cursor a la fila/columna con este código?

Nunca he visto este tipo de práctica para printf en libros, por lo que sería genial si pudiera dirigirme a un enlace donde pueda encontrar información sobre tales usos de printf.

+1

Parece inusual usar '% c' para dar formato a una constante. Lo siguiente sería equivalente: 'printf (" \ x1b [% d;% df ", y, x);' –

+0

Sí, popular también es ''\ 033''. Si utilicé el especificador de formato '% c', lo escribiría como' 27', que bien sabía que era ESC (a.k.a. 'Ctrl- [' o '^ ['). –

Respuesta

7

Esto está usando terminal escape codes para posicionar el cursor.

"\x1B" es el carácter de escape que indica al terminal que lo que sigue no está destinado a ser impreso en la pantalla, sino más bien un comando al terminal (o más probable emulador de terminal)

'F' trailing indica que desea forzar la posición del cursor en algún lugar, indicado por las coordenadas que lo preceden.

Force Cursor Position <ESC>[{ROW};{COLUMN}f 

Así que si usted llama gotoxy(4,2), termina el envío de la secuencia de escape "(ESC)[2;4f" donde ESC es el byte 0x1B.

+0

¡Gracias Jonathon! Fue realmente útil y fácil de entender. –

+1

Mi placer. Recientemente tuve que hacer mucha interpretación de estas secuencias de escape, así que de inmediato me llamó la atención. –

+0

Por cierto, tenga cuidado con esta técnica. Es altamente dependiente del tipo de terminal dentro de la cual se ejecuta el programa. No todos los emuladores de terminal dan el mismo significado a secuencias como esta. – ash