web-dev-qa-db-fra.com

Effacement du terminal sous Linux avec du code C ++

D'accord, j'ai fait des recherches sur la façon de le faire, mais disons que j'exécute un programme qui a un peu de sortie sur le terminal, comment pourrais-je effacer l'écran de mon programme afin que je puisse continuer mon programme?

Je sais que je peux simplement taper clear dans le terminal et cela efface très bien, mais comme je l'ai dit, pour ce programme, ce serait plus avantageux pour moi.

J'ai trouvé quelque chose qui fonctionne, cependant, je ne sais pas ce que c'est ni ce qu'il fait.

cout << "\033[2J\033[1;1H";

Cela fonctionne, mais je n'ai aucune idée de ce que c'est, si vous pouviez l'expliquer, que je l'apprécierais beaucoup.

32
John

Ce sont des codes d'échappement ANSI. Le premier (\033[2J) efface tout l'écran (J) de haut en bas (2). Le deuxième code (\033[1;1H) positionne le curseur sur la ligne 1, colonne 1.

Toutes les évasions ANSI commencent par la séquence ESC[, ont zéro ou plusieurs paramètres délimités par ;et terminez par une lettre de commande (J et H dans ton cas). \033 est la séquence octale de style C pour le caractère d'échappement.

Voir ici pour le roadshow complet.

48
Marcelo Cantos

Au lieu de dépendre de séquences d'échappement spécifiques qui peuvent se briser dans des situations inattendues (tout en acceptant que le compromis est bien, si c'est ce que vous voulez), vous pouvez simplement faire la même chose que vous feriez sur votre Shell:

std::system("clear");

Bien que le système () soit généralement à éviter, pour un programme interactif avec l'utilisateur, ni l'analyse supplémentaire de Shell ni la surcharge de processus ne sont significatives. Il n'y a pas de problème non plus avec l'échappement de Shell, dans ce cas.

Vous pouvez toujours fork/exec pour appeler clear si vous voulez éviter system (). Si vous utilisez déjà [n] curses ou une autre bibliothèque de terminaux, utilisez-le.

10
Roger Pate

Pour la portabilité, vous devez obtenir la chaîne de la capacité cl (clear) de termcap (écran clair et curseur d'accueil). (Ou utilisez std :: system ("clear") comme indiqué par Roger Pate).

homme 3 termcap (en ncurses)
homme 5 termcap
set | grep TERMCAP

0
kauppi