2013-12-23 2 views
1

Мне трудно объяснить, но я постараюсь изо всех сил.

Несколько раз в Linux-в терминале все печатается, но вы все равно можете писать по ним. например, при использовании Wget вы получите прогресс бар, как это:
Linux Printing - How To

[===================>   ] 

Теперь, если вы печатаете что-то в то время как он делает это будет «перезаписать» его. Мой вопрос - как воссоздать это в C++.

Будете ли вы использовать что-то вроде

cout << 

или что-то еще?



Я надеюсь, вы понимаете, что я имею в ...

кстати я использую самую последнюю версию Arch с xfce4

+2

Вам необходимо проконсультироваться с документацией вашего терминала и найти управляющие символы, которые перемещают курсор. –

ответ

4

Печать символ возврата каретки \r, как правило, интерпретируется в Linux как возвращающий вас к началу строки. Попробуйте, например:

std::cout << "Hello\rJ"; 

Выход будет:

Jello 

Это зависит от вашего терминала, однако, так что вы должны искать смысл отдельных управляющих символов для терминала.

Для получения более кросс-платформенного решения и возможности создания более сложных текстовых интерфейсов ознакомьтесь с ncurses.

2

Вы можете распечатать специальный символ \b, чтобы вернуться на одно место. Затем вы можете распечатать пробел, чтобы удалить его, или другой символ, чтобы перезаписать то, что было там. Вы также можете использовать \r для возврата к началу текущей выходной линии и записи оттуда.

+0

Это может работать или не работать; нет никакой гарантии. (В самых ранних системах, над которыми я работал, «терминал» был настоящим tty. И как только персонаж был напечатан, он был напечатан.) –

+0

Я не думаю, что мы подвергаемся очень большой опасности OP, используя реальную телетайпную машину , :) –

+0

Согласен. Но если выход перенаправляется на 'lpr', он может не получить то, что он хочет. –