Интерпретация '\ r' и '\ n' зависит от платформы или терминала.Терминалы могут быть настроены на автоматическое добавление перевода строки (0x0a) к «\ r».Кроме того, '\ n' - это newline , что может означать либо одну строку перевода (при условии возврата каретки), либо пару возврата каретки и перевода строки.Для переносимости нельзя рассчитывать на '\ r', чтобы вернуть только каретку (курсор) в начало текущей строки.
Чтобы попасть в начало той же строки, можно поддаться искушению использовать '\ b' (backspace).Но это тоже субъективно.Некоторые устройства вывода интерпретируют команду как деструктивную, некоторые как перемещение назад на один символ, неразрушающие, а другие игнорируют ее.
Я предлагаю вам вместо этого использовать библиотеку позиционирования курсора.Некоторые люди рекомендуют NCurses
.