104 votes

Effacer la ligne actuellement affichée dans la console

Comment puis-je effacer la ligne actuellement imprimée dans la console en C ? Je travaille sur un système Linux. Par exemple -

printf("hello");
printf("bye");

Je veux afficher bye sur la même ligne à la place de hello.

1voto

xitong Points 75

Utilisez cette fonction pour effacer n lignes en C++

void clear_line(int n) {
    std::string line_up = "\x1b[A";
    std::string line_clear = "\33[2K\r";
    for (int i = 0; i < n; ++i)
        std::cout << line_up << line_clear << std::flush;
}

1voto

printf("\x1b[1F");

entrez la description de l'image ici

Contrôles de curseur ANSI ici \x1b est un code d'échappement et [#F représente - aller au début des lignes # vers le haut.

0voto

David Points 1

Je viens de trouver ce vieux fil de discussion, à la recherche d'un genre de séquence d'échappement pour effacer la ligne actuelle.

Il est assez drôle que personne n'ait pensé à l'idée (ou que je l'ai manquée) que printf renvoie le nombre de caractères écrits. Il suffit donc d'imprimer '\r' + autant de caractères vides que printf en a renvoyés et vous effacerez exactement le texte précédemment écrit.

int BlankBytes(int Bytes)
{
                char strBlankStr[16];

                sprintf(strBlankStr, "\r%%%is\r", Bytes);
                printf(strBlankStr,"");

                return 0;
}

int main(void)
{
                int iBytesWritten;
                double lfSomeDouble = 150.0;

                iBytesWritten = printf("test text %lf", lfSomeDouble);

                BlankBytes(iBytesWritten);

                return 0;
}

Comme je ne peux pas utiliser VT100, il semble que je doive me contenter de cette solution

0voto

Ayush Mahajan Points 1
echo -e "bonjour\c" ;sleep 1 ; echo -e "\radieu  "

Que fera la commande ci-dessus :

  1. Elle affichera bonjour et le curseur restera sur "o" (en utilisant \c)

  2. Ensuite, elle attendra 1 seconde (sleep 1)

  3. Ensuite, elle remplacera bonjour par adieu. (en utilisant \r)

REMARQUE : En utilisant ";", nous pouvons exécuter plusieurs commandes en une seule fois.

0voto

andromeda92 Points 27

Pour moi, ce code fonctionne bien pour la fenêtre de console série avec Arduino sur Tera Term VT Console :

SEROUT.print("\e[A\r\n\e[2K");
SEROUT.print('>');

J'utilise '>' parce que dans ma console de commande je saisis la commande après '>'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X