форматирование консоли printf - PullRequest
0 голосов
/ 01 апреля 2011

Я хочу создать консольный дисплей с printf, где периодически я получаю некоторые данные на 3 каналах, и я хотел напечатать строки вроде:

Channel1 Last_message_1
Channel2 Last_message_2
Channel3 Last_message_3

и когда на канал 2 приходит новое сообщение, я хочу перезаписать эту часть консоли. Как:

Channel1 Last_message_1
Channel2 New_message_2
Channel3 Last_message_3

Я знаю, что такого рода вещи можно сделать с помощью printf, но я не помню как. Есть указатели?

Ответы [ 4 ]

0 голосов
/ 01 апреля 2011
printf ( "\033[2;1H");     // move to 2nd line
0 голосов
/ 01 апреля 2011

Насколько я знаю, вы можете изменить только последнюю строку с помощью printf, и здесь вы хотите изменить любую строку, поэтому я думаю, что вам нужно будет изучить ncurses .

0 голосов
/ 01 апреля 2011

Вы не можете сделать это с помощью printf.Если ваша консоль поддерживает ее, вы можете отправить ей управляющие коды ANSI для позиционирования курсора - но управляющие коды ANSI довольно неуклюжи, и многие «консоли» просто не поддерживают их, и в этом случае вы получитемного лишнего мусора с данными, которые вы пытаетесь произвести.

Это оставляет использование чего-то, что, по крайней мере, теоретически непереносимо.Если мобильность все еще имеет значение, моим непосредственным выбором среди них, вероятно, будут ncurses - это достаточно приличный дизайн, довольно простой в использовании и достаточно портативный.писать (например) исключительно для Windows, стоило бы рассмотреть возможность использования встроенных функций консоли.Однако можно утверждать, что это редко является очень хорошим компромиссом - вы теряете всю мобильность и получаете только небольшую скорость и т. Д.

0 голосов
/ 01 апреля 2011

Этот пост может быть полезен:

печать на экране из консольного приложения с перезаписью текущей строки

в частности, ответ № 2 (не выбранный ответ)

...