2014-09-19 3 views
-3

Так что мне было интересно, как это сделать в течение некоторого времени, и я подумал, что лучше спросить тогда сообщество SO.Печать на терминал без прокрутки

Приносим извинения заранее, если это немного расплывчато, но я сделаю все возможное, чтобы задать вопрос.

Мы все помним, как мы впервые попали в бесконечный цикл с заявлением о печати. Терминал заполняется быстро, и вскоре все вы видите его кучу прокручиваемого текста ...

Как мне его не прокрутить? Я имею в виду ... Как переписать строку, которая уже написана.

Как я могу сделать свой бесконечный цикл с оператором печати одной строки (не более одной новой строки) только для печати на одной строке. Если терминал не прокручивается.

Instead of .... 
    This is an infinite loop 
    This is an infinite loop 
    This is an infinite loop 

You just have one line that updates every iteration of the loop. 
    This is an infinite loop 

Спасибо за чтение, комментарий, если это не сделало абсолютно никакого с тех пор. Я попытаюсь прояснить ситуацию в облачном мире ...

PS - То, что я делаю сейчас, находится на C, но было бы неловко знать, как это сделать на других языках.

Вопрос (0,1)

Что делать, если вы хотите обновить несколько строк в месте?

printf("This is some text\n"); 
printf("This is more text\n"); 

Это даст мне две строки, и я хочу обновить их оба, но не прокручивать.

+0

Что такое ОС, которую вы используете? можешь сказать мне? –

+2

Это не относится к C/C++, это зависит от того, какой терминал вы используете и как он настроен. Большинство терминалов распознают символ ANSI '' \ r ', как перенос курсора обратно в начало строки, не вызывая новую строку (и, следовательно, не прокручивая). – Galik

+0

Спасибо за ответы. С тех пор я думаю об этом. –

ответ

1

Попробуйте это ...

while(1) 
{ 
    printf("this id infinite loop\n"); 
    sleep(1); 
    system("clear"); 
} 
+0

+1 Это достойное упоминания, но гораздо менее портативное, чем '\ r'. –

3

Вы можете использовать управляющую последовательность возврата каретки или \r. Это вернет курсор к началу строки.

while (1) 
{ 
    std::cout << "\rTest."; 
} 
3

Вам нужно только возврат каретки, а не построчно кормить, следовательно, вы должны использовать только «\ г» возврата каретки означает приведение курсора в начало строки. Линейная подача означает подачу новой линии на терминал.

В C:

while(1) 
{ 
    printf("\r This is an infinite loop."); 
} 

Поскольку Printf в буфер, поэтому это хорошая практика, чтобы явно промывать выходной поток.

+0

Возможно, вы тоже хотите явно скрыться ...? –

+0

@Tony D - Так как printf буферизуется, поэтому рекомендуется четко очистить выходной поток. –

+1

Я действительно знаю это, поэтому я тонко намекнул, что вы можете соответствующим образом обновить свой код ... ;-). –

Смежные вопросы