Как заменить уже напечатанный текст в командной строке? - PullRequest
2 голосов
/ 28 августа 2011

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

Loading: 5%

и тогда он говорит

Loading: 10%

и т. Д., без печати нового текста с добавлением ?

Как это сделать? Я не видел таких функций в библиотеке (в данном случае C). У меня есть идея: есть символ, который вы можете написать, который возвращает подсказку в начало текущей строки (\r Я полагаю). Может ли это быть использовано для «перезаписи» того, что вы уже напечатали в командной строке?

Ответы [ 2 ]

7 голосов
/ 28 августа 2011

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

Для простого поведения, такого как индикатор прогресса, это все, что вам нужно.Для более сложного поведения вам необходимо управлять терминалом нестандартными средствами.В системах на основе Unix можно использовать библиотеку ncurses - она ​​дает вам полный контроль над расположением курсора, цветом текста, эхом клавиатуры, более мелким вводом с клавиатуры и т.* В Windows есть набор функций для управления консолями, и они могут выполнять в основном те же действия, что и консоли Unix.

2 голосов
/ 28 августа 2011

Один из способов, которые я видел, - это просто напечатать символ возврата на одну страницу, а затем заменить все, что вы стерли, новым текстом.

Символ возврата на другую позицию - это управляющий символ ASCII, представленный \ b.

...