Подтвердить что ты не робот

Перемотка std:: cout, чтобы вернуться к началу строки

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

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

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

4b9b3361

Ответ 1

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

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

std::cout << "will not see this\rwill see this" << std::flush;
std::cout << std::endl; // all done

Ответ 2

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

Я уверен, что Mac обрабатывает как возврат каретки, так и линейные каналы по-разному, чем * nix и windows.

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

Ответ 3

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

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