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

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

Она называет conio.h библиотека, которая является старым заголовком для компиляторов MS-DOS, как я читал там: /questions/9743108/pochemu-ya-ne-mogu-najti-conioh-v-linux/9743140#9743140
Я получил две другие ошибки из-за использования system("cls"); а также getch();, которые являются функциями только для Windows, из того, что я узнал.

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

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

1 ответ

Решение

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

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');
}
Другие вопросы по тегам