没有第二次getch的ncurses没有输出

时间:2017-04-30 11:24:02

标签: c ncurses

我遇到与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来电的组合,但我不知道究竟问题在哪里。

谢谢你看看。

1 个答案:

答案 0 :(得分:1)

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

  

initscr 也会导致          首先致电refresh(3x)以清除屏幕。

执行此操作需要在调用initscr后的某个时间进行刷新。 getch刷新了 stdscr 。在非工作的情况下,程序创建,修改和刷新另一个窗口,但是当你调用getch时,curses刷新 stdscr (再次,在manual中),覆盖该窗口。

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