2011-12-30 13 views
12

ero alla ricerca di un sostituto di gotoxy() per il compilatore gcc e abbiamo trovato questo -gotoxy() per Linux utilizzando printf

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

Voglio sapere come è funziona, voglio dire quando usiamo [ e ; all'interno di printf, che cosa fa 0x1B e come porta il cursore alla riga/colonna con questo codice?

Non ho mai visto questo tipo di pratica per la stampa nei libri, quindi sarebbe fantastico Se potessi indicarmi un link dove posso trovare informazioni su tali usi di printf.

+1

Sembra insolito per usare 'C'% per formattare una costante. Il seguente sarebbe equivalente: 'printf (" \ x1b [% d;% df ", y, x);' –

+0

Sì, popolare è anche ''\ 033''. Se usassi lo specificatore di formato '% c', lo scriverei come' 27' - che sapevo bene essere ESC (a.k.a. 'Ctrl- [' o '^ ['). –

risposta

7

Questo sta utilizzando terminal escape codes per posizionare il cursore.

"\x1B" è il carattere di escape che indica al terminale che quello che viene dopo non è destinata ad essere stampato sullo schermo, ma piuttosto un comando al terminale (o, più probabilmente un emulatore di terminale)

'F' finale indica che vuoi forzare la posizione del cursore da qualche parte, indicato dalle coordinate che lo precedono.

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

Quindi, se si chiama gotoxy(4,2), finisce per l'invio della sequenza di escape "(ESC)[2;4f" dove ESC è il byte 0x1B.

+0

Grazie Jonathon! E 'stato davvero utile e facile da capire. –

+1

Piacere mio. Recentemente ho dovuto interpretare molte di queste sequenze di escape, quindi mi sono immediatamente mostrato. –

+0

A proposito - stai attento con questa tecnica. Dipende molto dal tipo di terminale all'interno del quale viene eseguito il programma. Non tutti gli emulatori di terminale danno lo stesso significato a sequenze come questa. – ash