是否有一种简单的方法可以在CLI中使用可互操作的代码清除屏幕/保持输出窗口,避免使用conio.h和ncurses.h?

时间:2016-09-08 15:01:21

标签: c++ linux ncurses conio

我刚刚开始进行计算机科学研究。编程老师选择C ++来教我们程序编程,因此给我们提供了代码示例和练习。我们得到的第一个样本是CLI“找到合适的号码”游戏。真正的第一个任务是简单地重新键入源代码,编译并运行它。我已经使用Linux几年了(即使我根本不是计算机书呆子),当我编译代码时,它失败了。查看错误日志让我注意到我的老师显然没有考虑Unix用户。

她调用conio.h库,这是MS-DOS编译器的旧标题,正如我在那里读到的那样:https://stackoverflow.com/a/8792443/6723830
由于使用了system("cls");getch();,我得到了另外两个错误,这些错误是我所学习的仅限Windows的函数。

在我的研究过程中,我无法为这些功能找到合适的替代品。至少不是简单的解决方案,以适应我目前的编程水平。我正在考虑使用ncurses.h,但我读过this page,这真的很有趣,但NCurses被描述为过度杀伤......

那么,是否有一种跨平台的方式来清理屏幕并保持输出窗口,直到用户点击任何键? NCurses是否像它所说的那样过度杀伤,或者它是目前最好的解决方案?
我想,我将不得不在即将到来的任务中制作这样的CLI。当然,我可以简单地使用仅限MS的功能,这样她就不会抱怨,但我宁愿能够生成可互操作的代码。

1 个答案:

答案 0 :(得分: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');
}