Effacer le texte dans une console sous C

Boriss -  
jisisv Messages postés 3678 Statut Modérateur -
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

  1. Bilow Messages postés 171 Date d'inscription   Statut Membre Dernière intervention   117
     
    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
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
    1. Wazza6 Messages postés 202 Statut Membre 40
       
      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
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
    3. rosettas
       
      Remplacer CONSOLE_CONS_BUFFER_INFO par CONSOLE_SCREEN_BUFFER_INFO (CONSOLE_CONS_BUFFER_INFO n'est pas défini sinon)
      0
  3. rob
     
    Moi je te conseille de prendre api aussi
    0
  4. jisisv Messages postés 3678 Statut Modérateur 936
     
    Et si ta console supporte l'ANSI, un simple
    puts("\x1b[2J"); suffira.
    0