Как заменить уже напечатанный текст в командной строке?

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

Loading: 5%

а потом говорит

Loading: 10%

и так далее, без печати нового текста, который добавляется?

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

2 ответа

Решение

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

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

В Windows есть набор функций для управления консолями, и они могут выполнять в основном те же действия, что и консоли Unix.

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

Символ Backspace является управляющим символом ASCII, представленным \b.

Другие вопросы по тегам