Есть ли простой способ очистить экран / удерживать окно вывода в 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');
}