Effacer le texte dans une console sous C

Fermé
Boriss - 24 août 2010 à 17:39
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 - 29 juil. 2012 à 04:48
Bonjour,

J'ai assez récemment commencé à apprendre la programmation en C, je créé donc des programmes en console et je voudrais savoir comment effacer le texte écrit pendant l'exécution. J'espère avoir été clair. Merci d'avance.

4 réponses

Bilow Messages postés 1014 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
24 août 2010 à 21:16
Salut !

Si ton programme reste sous Windows, tu peux utiliser ceci :
system("cls");
Mais toutefois certains protesterons, je ne sais pas pourquoi.

Si tu veux que ton programme aille autre part que sous Windows, j'ai déjà vu un psot qui traitait de cela.

Recherche dans les quelques dernières pages de tout mes posts :
https://forums.commentcamarche.net/forum/s/programmation-3/u/bilow

Bonne recherche :D
[ Désolé, mais je ne me souviens vraiment pas duquel... ]
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
24 août 2010 à 23:29
Bonjour,

Voici le code en C :
#include <windows.h>

void windows_clear_screen(void)
{
    HANDLE hConsole;
    CONSOLE_CONS_BUFFER_INFO Info;
    DWORD NbOctetsEcrits; /* Requis par FillConsoleOutputCharacter */
    COORD Debut = {0, 0};
    
    /* STD_OUTPUT_HANDLE fait reference a la sortie standard du programme qui est par defaut la console */
    hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    
    /* Lit les infos sur le buffer de l'ecran */
    GetConsoleScreenBufferInfo(hConsole, &Info);
    
    /* Remplit l'ecran avec le caractere espace */
    FillConsoleOutputCharacter(hConsole, ' ', Info.dwSize.X*Info.dwSize.Y, Debut, &NbOctetsEcrits);
    
    /* Remet le curseur au debut de l'ecran */
    SetConsoleCursorPosition(hConsole, Debut);
}

Source : https://c.developpez.com/faq/?page=Gestion-du-clavier-et-de-l-ecran-en-mode-console#CONS_clear_screen

Il vaut mieux passer par les API qu'utiliser la fonction system().

Cdlt,
0
Wazza6 Messages postés 180 Date d'inscription lundi 31 décembre 2007 Statut Membre Dernière intervention 21 juillet 2012 40
25 août 2010 à 03:11
Pourquoi? Le code qui utilise l'API n'est pas plus portable que le code qui utilise la fonction system() , il est juste plus gros, il arrive au même résultat avec ton code.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
25 août 2010 à 08:27
A Wazza6
Ça tombe bien, la raison n'est pas la portabilité. C'est une question de performance... La fonction system est très lourde en plus d'être moche et peu sécurisée. Après si vous ne considérez pas ces critères comme important, il n'y a aucun intérêt a développer en C.
0
Remplacer CONSOLE_CONS_BUFFER_INFO par CONSOLE_SCREEN_BUFFER_INFO (CONSOLE_CONS_BUFFER_INFO n'est pas défini sinon)
0
Moi je te conseille de prendre api aussi
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
29 juil. 2012 à 04:48
Et si ta console supporte l'ANSI, un simple
puts("\x1b[2J"); suffira.
0