GNU/Linux >> Znalost Linux >  >> Linux

Jak aktualizovat vytištěnou zprávu v terminálu bez opětovného tisku

Řekl bych, že knihovna jako ncurses by byla na takové věci zvyklá. curses pomáhá pohybovat kurzorem po obrazovce a kreslit text a podobně.

NCcurses


Něco takového:

std::stringstream out;
for (int i = 0; i< 10; i++)
{
  out << "X";
  cout << "\r" << "[" << out.str() << "]";
}

Záludný bit je znak návratu vozíku "\r", který způsobí, že se kurzor přesune na začátek řádku, aniž by přešel na další řádek.


Jiní již poukázali na to, že můžete použít \r pro návrat na začátek aktuálního řádku a přepsání celého řádku.

Další možností je použít znak backspace ("\b") k vymazání několika mezer a přepsání pouze těchto mezer. To může mít několik výhod. Za prvé, zjevně se vyhne nutnosti regenerovat vše v řadě, což může být někdy mírně bolestivé (ačkoli to je poměrně neobvyklé). Za druhé, může se vyhnout bolesti při zobrazování dat, která se (například) při psaní zmenšují – například pokud zobrazujete odpočítávání od 100 do 0 s \r musíte si dávat pozor na přepsání celé předchozí délky, jinak vaše odpočítávání půjde od (například) 100 do 990 (tj. předchozí "0" zůstane nedotčena).

Všimněte si však, že zatímco zpětná mezera na řádku normálně funguje, zpětná mezera na začátku řádku může nebo nemusí přesunout kurzor/pozici zápisu zpět na předchozí řádek. Pro většinu praktických účelů se můžete pohybovat pouze v rámci jednoho řádku.


zkuste použít \r místo \n při tisku nové "verze".

for(int i=0;i<=100;++i) printf("\r[%3d%%]",i);
printf("\n");

Linux
  1. Jak aktualizovat ovladač adaptéru Ralink 5390 přes terminál?

  2. Jak aktualizovat obrázek FOG

  3. Jak nastavit nastavení proxy na příkazovém řádku nebo terminálu Linuxu

  1. Jak vymažu tištěné znaky v konzolové aplikaci (Linux)?

  2. Jak vytisknu zprávu na stderr v Go?

  3. Jak mohu odeslat zprávu na můj socket.io websocket z příkazového řádku v linuxu?

  1. Jak aktualizovat software Ubuntu Linux pomocí příkazového řádku

  2. Jak změnit kurzor terminálu z pole na řádek?

  3. Jak připojit řádek do zazipovaného souboru bez rozbalení?