Как использовать возврат каретки с несколькими строками?

Когда я хочу напечатать другой текст в той же строке, я могу сделать это:

int i = 0;
string text = "Paragraph ";
while (i < 10) {
if (clock() % CLOCKS_PER_SEC == 0) {
cout << text << i + 1 << "\r";
cout.flush();
i++;
}
}

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

Как я могу сохранить свою позицию?

2

Решение

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

Стандартный C ++ не дает вам такой возможности. Вам придется использовать специфические для ОС функции, чтобы поместить курсор в произвольное место консоли.

В Unix-подобных системах вы обычно используете Escape-последовательности ANSI

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

4

Другие решения

Это невозможно в стандарте C ++.

Методика зависит от того, какое стандартное устройство вывода (т.е. std::cout) — это сложно, так как это зависит от операционной системы и выбора конечного пользователя. Например, многие физические терминалы (и эмуляторы терминалов / консолей) поддерживают escape-последовательности. Стандартный вывод может быть перенаправлен на различные устройства (в том числе в текстовый файл, что делает позиционирование курсора немного бессмысленным).

В общих чертах, вам нужно будет указать устройство вывода (то есть, на что ваша программа может рассчитывать, что вывод выводится), хост-систему, системные настройки и кучу других вещей. А затем используйте API (или библиотеку), поддерживаемые в хост-системе. В зависимости от вашего выбора, методы сильно различаются.

Под unix могут использоваться библиотеки функций, такие как curses. Если вы используете curses, вам, вероятно, будет необходимо использовать другие функции curses для фактической записи вашего вывода (вместо cout).

Под окнами есть набор функций консоли API (подмножество win API), таких как SetConsoleCursorPosition(), Опять же, это может быть проще, если вы используете другие функции консоли, а не cout,

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector