没有第二个 getch,ncurses 没有输出

No output from ncurses without second getch

我遇到了与 Ncurses No Output 类似的问题。 只是我在退出前打了一个 getch 电话。 当我不添加第二个 getch 调用时,我看不到任何输出 在输出任何东西之前。以下是合集 所有相关代码部分一起复制到一个例程中 表现出与我的完整程序相同的问题。 所以有些电话看起来是多余的,但我觉得那些是必要的 在当地情况下。

#include <glib.h>
#include <stdlib.h>

#define bool ncbool
#include <ncurses.h>
#undef bool


gint32 main ( gint32 argc, gchar * argv [] )
{
    initscr ();
    keypad ( stdscr, FALSE );
    nonl ();
    cbreak ();
    nodelay ( stdscr, FALSE );
    noecho ();

    /*
    gint zch_extra;
    zch_extra = getch ();
    */

    WINDOW* w;
    w = newwin ( 5, 10, 3, 3 );
    box ( w, 0, 0 );
    wnoutrefresh ( w );

    mvwaddstr ( w, 1, 1, "huhu" );
    wnoutrefresh ( w );
    doupdate ();

    mvwaddstr ( w, 2, 1, "<cont>" );
    wrefresh ( w );

    gint zch;
    zch = getch ();

    clear ();
    refresh ();

    nl ();
    nocbreak ();
    echo ();

    endwin ();

    return 1;
}

我只在添加代码中注释掉的额外 getch 时才看到输出。

编译命令:

gcc -I /usr/include/ncurses -I /home/mkiever/include -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include  -ansi -ggdb -c -o main.o main.c
gcc -o test main.o -lncurses `pkg-config --libs glib-2.0`

平台(uname -a):Linux Pirx 3.16.0-4-686-pae #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) i686 GNU/Linux

我做错了什么?我想,这是我对不同 refresh 调用的组合,但我不知道问题到底出在哪里。

感谢观看。

curses 启动时想要清除屏幕 stdscr(如 initscr 的手册页所述):

initscr also causes the first call to refresh(3x) to clear the screen.

这样做需要在调用 initscr 之后的某个时间进行刷新。 getch 刷新 stdscr。在非工作情况下,程序会创建、修改和刷新另一个 window,但是当您调用 getch 时,curses 会刷新 stdscr(同样,在 manual), 覆盖 window.

它在内部执行这些步骤,在程序通过 getch 请求输入之前不需要显示结果。