Есть ли простой способ очистить экран / удерживать окно вывода в CLI с помощью совместимого кода, избегая conio.h и ncurses.h?

Я только начал изучать информатику. Учитель программирования выбрал C ++, чтобы научить нас процедурному программированию, и поэтому дает нам примеры кода и упражнения. Первым примером, который мы получили, была игра CLI «Найди правильный номер». По-настоящему первым заданием было просто перепечатать исходный код, скомпилировать и запустить его. Я использую Linux уже несколько лет (хотя я совсем не компьютерный ботаник), и когда я скомпилировал код, он не удался. Просмотр журналов ошибок заставил меня заметить, что мой учитель явно не рассматривает пользователей Unix.

Она называет conio.h библиотека, которая является старым заголовком для компиляторов MS-DOS, как я читал там: https://stackoverflow.com/a/8792443/6723830
Я получил две другие ошибки из-за использования system("cls"); а также getch();, которые являются функциями только для Windows, из того, что я узнал.

Я не смог найти подходящих альтернатив для этих функций во время моих исследований. По крайней мере, нелегкие решения, подходящие для моего текущего уровня программирования. Я думал об использовании ncurses.h, но я прочитал эта страница, что действительно интересно, но NCurses изображен как излишний…

Итак, есть ли кроссплатформенный способ очистки экрана и удержания окна вывода, пока пользователь не нажмет какую-либо клавишу? Является ли NCurses таким же излишним, как говорят, или это лучшее решение на данный момент?
Думаю, мне придётся делать такие вещи из CLI в предстоящих заданиях. Конечно, я мог бы просто использовать функции только для MS, чтобы она не жаловалась, но я бы скорее смог создать совместимый код.

4

Решение

Самый распространенный и переносимый способ очистить окно консоли — просто написать функцию для вывода набора символов новой строки, например:

void clearScreen()
{
for(int i = 0; i < 15; ++i)
std::cout << '\n';
}

А для удержания ввода вы можете написать функцию паузы, что-то вроде:

void pause() // wait for input and discard any unnecessary input
{
std::cin.get();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
4

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

Других решений пока нет …

По вопросам рекламы [email protected]