如何使用getch()(来自curses库)?

时间:2012-07-01 01:46:31

标签: c ncurses

考虑以下代码:

if(initscr() == NULL) ERROR("Cannot start ncurses mode.\n");

    keypad(stdscr, TRUE);

    cbreak();

    int reply = getch(); 

    if(reply == 'y')
        printw("yes!\n");
    else if(reply == 'n')
        printw("no!\n");
    else
        printw("invalid answer!\n");

    refresh();

    endwin();

独立于我键入的键,程序将关闭而不打印任何消息。

有人可以解释这个程序的行为吗?提前谢谢。

2 个答案:

答案 0 :(得分:2)

您调用printw()打印三条消息之一,然后refresh()以显示消息。到目前为止,非常好。

然后您立即拨打endwin(),这可能会清除屏幕(取决于您的termcap / terminfo设置)。

实际上可能会显示消息;它只是不会留在屏幕上足够长的时间来阅读它。

尝试在getch()来电后添​​加延迟或其他refresh()来电。

答案 1 :(得分:0)

如果在refresh()和endwin()之间插入sleep(5),您应该会看到更好的结果。至少,我这样做。