Перемотка std :: cout для возврата к началу строки - PullRequest
21 голосов
/ 17 июня 2010

Я пишу инструмент командной строки для Mac OS X, который обрабатывает кучу файлов.Я хотел бы показать пользователю текущий файл, который обрабатывается, но не хочу, чтобы bazillion файлов загрязнял окно терминала.

Вместо этого я хотел бы использовать одну строку для вывода пути к файлу, а затем повторно использовать эту строкудля следующего файла.Есть ли символ (или какой-то другой код) для вывода на std::cout для достижения этой цели?

Кроме того, если бы я хотел переназначить этот инструмент для Windows, было бы решение одинаковым для обеих платформ?

Ответы [ 3 ]

19 голосов
/ 17 июня 2010

"\ r" должно работать как для Windows, так и для Mac OS X.

Что-то вроде:

std::cout << "will not see this\rwill see this" << std::flush;
std::cout << std::endl; // all done
1 голос
/ 17 июня 2010

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

Я почти уверен, что Mac обрабатывает как возврат каретки, так и перевод строки, чем* nix & windows.

Если вы ищете обновления на месте (например, перезаписать текущую строку), я бы порекомендовал взглянуть на curses lib.Это должно предоставить платформе независимые средства для выполнения того, что вы ищете.(потому что даже при использовании стандартного C ++ не существует платформо-независимых средств для того, что вы просите).

0 голосов
/ 13 ноября 2014

std :: cout интерпретирует "\ r" как возврат к началу строки, если вам не нужно каждый раз добавлять "<< endl", используйте "\ n" </p>

std::cout << "this will work!\nSee... a new line!" << std::endl;

...