Это возможно при использовании API консоли, но это требует много работы, и все потоки, которые используют консоль, должны будут взаимодействовать, вызывая ваш метод вывода, а не прямой вызов функций API консоли или функций вывода библиотеки времени выполнения .
Основная идея состоит в том, чтобы ваша общая функция вывода записывала данные в буфер экрана консоли и прокручивала буфер в коде, а не позволяла тексту перетекать в последнюю строку и прокручивалась автоматически. Насколько я помню, вам придется анализировать вывод на наличие новых строк и других управляющих символов и правильно их обрабатывать.
Вы можете быть в состоянии избежать использования "готового" консольного ввода в последней строке, хотя при этом вы рискуете столкнуться с проблемами, если пользователь введет больше текста, чем поместится в одной строке. Кроме того, пользователь, нажимающий Enter в конце строки, может вызвать прокрутку вверх. Вероятно, лучше всего в этой ситуации использовать необработанный ввод с консоли.
Вам захочется хорошо познакомиться с приставками Windows .