12
votes

Gotoxy () Mise en œuvre pour Linux à l'aide de Printf

Je cherchais un substitut de gotoxy () pour le compilateur GCC et j'ai trouvé cela -

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


2 commentaires

Il semble inhabituel d'utiliser % c pour formater une constante. Ce qui suit serait équivalent: printf ("\ x1b [% d;% df", y, x);


Oui, populaire est également '\ 033' . Si j'utilisais % c Spécificateur de format, je l'écrirais comme 27 - que je connaissais bien être Echa (AKA Ctrl - [ ou ^ [).


3 Réponses :


7
votes

Ceci utilise codes d'échappement terminal pour positionner le curseur.

"\ x1b" est le caractère d'échappement qui indique à votre terminal que ce qui se passe ensuite n'est pas destiné à être imprimé à l'écran, mais plutôt une commande à la borne (ou l'émulateur de terminal le plus probable)

Le trailing 'F' indique que vous souhaitez forcer la position du curseur quelque part, indiquée par les coordonnées qui le précèdent. xxx

donc si vous appelez gotoxy (4,2) , il finit par envoyer la séquence d'évacuation "(ESC) [2; 4f" ESC est l'octet 0x1b .


4 commentaires

Merci Jonathon! C'était vraiment serviable et facile à comprendre.


Mon plaisir. J'ai récemment dû faire beaucoup d'interprétation de ces séquences d'échappement pour que cela me soit immédiatement coincé.


Au fait, soyez prudent avec cette technique. Il dépend fortement du type de terminal dans lequel le programme fonctionne. Tous les émulateurs de terminaux ne donnent pas le même sens aux séquences comme celle-ci.


@ user2532621 comprise. C'est ce que sont les malédictions et TermCap. Cependant, je répondais à la question opposée: "Quelle est cette mise en œuvre?" Pas "Comment puis-je implémenter cela?"



3
votes

Ceux-ci sont appelés séquences d'échappement ANSI et dérivées du Dec VT100 Terminal d'affichage introduit en 1978.


0 commentaires

1
votes

appelé code d'échappement ANSI. Je n'ai pas vu ceux utilisés depuis un moment. Voici une page qui explique à leur sujet:

http://fr.wikipedia.org/wiki/ansi_escape_code


0 commentaires