web-dev-qa-db-fra.com

Effacer l'écran en C et C++ sur un système UNIX?

Je veux savoir: comment nettoyer l'écran sur un système UNIX? J'ai cherché sur Internet, mais je viens de trouver un moyen de le faire sous Windows: système ("CLS") Je ne veux pas nettoyer l'écran complètement de cpm, mais je veux ouvrir une "nouvelle page" , comme dans les éditeurs NANO et VI. Merci

11
user2355660

Peut-être que vous pouvez utiliser des codes d'échappement

#include <stdio.h>

#define clear() printf("\033[H\033[J")

int main(void)
{
    clear();
    return 0;
}

Mais gardez à l'esprit que cette méthode n'est pas compatible avec tous les terminaux

21
Keine Lust

Vous pouvez utiliser le code suivant qui utilise termcap pour effacer l'écran . (N'oubliez pas de vous connecter à la bibliothèque)

#include <stdio.h>
#include <stdlib.h>
#include <termcap.h>

void clear_screen()
{
char buf[1024];
char *str;

tgetent(buf, getenv("TERM"));
str = tgetstr("cl", NULL);
fputs(str, stdout);
} 
15
Shar

Le code UNIX portable devrait utiliser la base de données terminfo pour toutes les manipulations de curseur et d'écran. C'est ce que des bibliothèques comme curses utilisent pour obtenir ses effets comme le fenêtrage, etc.

La base de données terminfo maintient une liste de capacités (comme clear, que vous utiliseriez pour effacer l'écran et envoyer le curseur en haut). Il conserve ces fonctionnalités pour une gamme de périphériques wide, de sorte que vous n'ayez plus à vous soucier de savoir si vous utilisez une console Linux ou un terminal VT52 (très daté).

Pour ce qui est de obtenir les flux de caractères pour certaines opérations, vous pouvez choisir la méthode éprouvée mais plutôt horrible d'utiliser simplement system pour le faire:

system ("tput clear");

Ou vous pouvez capturer la sortie de cette commande dans un tampon afin qu'une utilisation ultérieure implique uniquement la sortie des caractères plutôt que la réexécution de la commande:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

static char scrTxtCls[20]; static size_t scrSzCls;

// Do this once.

FILE *fp = popen ("tput clear", "r");
scrSzCls = fread (scrTxtCls, 1, sizeof(scrTxtCls), fp);
pclose (fp);
if (scrSzCls == sizeof(scrTxtCls)) {
    actIntelligently ("you may want to increase buffer size");
}

// Do this whenever you want to clear the screen.

write (1, cls, clssz);

Ou bien, vous pouvez créer un lien avec ncurses et utiliser son API pour obtenir les fonctionnalités de votre choix, bien que cela puisse entraîner beaucoup de choses pour quelque chose d'aussi simple que d'effacer l'écran. Néanmoins, c’est une option à considérer sérieusement car cela vous donne beaucoup plus de flexibilité.

4
paxdiablo

Il ne s’agit généralement pas d’effacer l’écran mais de créer une application compatible avec les terminaux.

Vous devriez utiliser la bibliothèque ncurses et lire le HowTo de programmation - NCURSES

(Vous pourriez peut-être utiliser certains codes d'échappement ANSI as David RF a répondu, mais je ne pense pas que ce soit une bonne idée)

3
#include <stdlib.h>
int main(void)
{
    system("clear");
}
3
Naffi

Utilisez system("clear"); avec en-tête #include <stdlib.h> (pour le langage C) ou #include <cstdlib> (pour C++).

0
Ammar Saleem

Ce code est destiné à l’écran clair avec réinitialisation de la position de la barre de défilement dans les fenêtres de type terminal#include <iostream> int main(){ std::cout << "\033c"; return 0;}

0
Andreadjk

Il suffit d'utiliser #include<stdlib.h> après #include<stdio.h>.

Ensuite, vous pouvez utiliser la commande system("clear");after main() {

c'est à dire:

#include<stdio.h>
#include<stdlib.h>

int main()
{
    system("clear");

Après ces commandes, vous pouvez continuer avec votre programme.

J'espère que cela t'aides :)

0
Vishal Chincholi

Vous pouvez y parvenir en utilisant des séquences CSI:

#include <stdio.h>
int main()
{
    printf("\x1b[H\x1b[J");
}

Qu'est-ce que \x1b[H?

En réalité, il est identique à \x1b[1;1;H, cela signifie que le curseur sera déplacé vers la ligne 1 et la colonne 1.

Qu'est-ce que \x1b[J a.k.a \x1b[0;J?

Si n est égal à 0 ou manquant, le curseur disparaîtra de la fin de l’écran.

Source: https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences

0
Ryozuki

Pour effacer l'écran en utilisant termcaps, utilisez ceci: 

write(1, tgetstr("cl", 0), strlen(tgetstr("cl", 0)));
0
Jonsmoke