没有第二个 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
请求输入之前不需要显示结果。
我遇到了与 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
请求输入之前不需要显示结果。