在循环中执行 initscr() 会导致错误初始化
doing initscr() in a loop causes error initialisation
我正在尝试制作一个简单的 ncurses 程序来显示一个带有消息的框。我正在关注这个 link,它运作良好。我遇到的问题是,如果我将整个代码放在一个函数中并在循环中调用它,初始化就会出错。据我所知,如果我在函数末尾调用 endwin()
,再次调用 initscr()
应该没有任何问题。我是否缺少使 initscr()
再次被调用的功能?
这是代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <curses.h>
int call()
{
WINDOW *mainwin, *childwin;
int ch;
if ((mainwin = initscr()) == NULL) {
fprintf(stderr, "Error initialising ncurses.\n");
exit(EXIT_FAILURE);
}
noecho();
curs_set(FALSE);
keypad(mainwin, TRUE);
mvaddstr(childwin, 1, 6, "Warning! Press q to exit");
mvaddstr(childwin, 2, 15, "{ OK }");
refresh();
while( (ch = getch()) != 'q') {
refresh();
}
delwin(mainwin);
endwin();
refresh();
return EXIT_SUCCESS;
}
int main()
{
int i;
for (i=0;i<10;i++) {
call();
}
return 0;
}
编辑: 我已经放了头文件。把代码改得更简单
示例程序不调用 initscr
个以上。但是,它也没有显示 #include
行(编译所必需),所以可能不是实际 运行.
的程序
关于调用initscr
的问题(一次或多次),至少有两种可能:
- 您正在使用其他一些 curses 实现(例如,HPUX 之类的 Unix 实现)。如 X/Open 中所述,可移植程序不得多次调用 initscr。
TERM
变量未设置为可用值。像往常一样,manual page 解释了该函数的作用,以及它可能失败的原因。
我正在尝试制作一个简单的 ncurses 程序来显示一个带有消息的框。我正在关注这个 link,它运作良好。我遇到的问题是,如果我将整个代码放在一个函数中并在循环中调用它,初始化就会出错。据我所知,如果我在函数末尾调用 endwin()
,再次调用 initscr()
应该没有任何问题。我是否缺少使 initscr()
再次被调用的功能?
这是代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <curses.h>
int call()
{
WINDOW *mainwin, *childwin;
int ch;
if ((mainwin = initscr()) == NULL) {
fprintf(stderr, "Error initialising ncurses.\n");
exit(EXIT_FAILURE);
}
noecho();
curs_set(FALSE);
keypad(mainwin, TRUE);
mvaddstr(childwin, 1, 6, "Warning! Press q to exit");
mvaddstr(childwin, 2, 15, "{ OK }");
refresh();
while( (ch = getch()) != 'q') {
refresh();
}
delwin(mainwin);
endwin();
refresh();
return EXIT_SUCCESS;
}
int main()
{
int i;
for (i=0;i<10;i++) {
call();
}
return 0;
}
编辑: 我已经放了头文件。把代码改得更简单
示例程序不调用 initscr
个以上。但是,它也没有显示 #include
行(编译所必需),所以可能不是实际 运行.
关于调用initscr
的问题(一次或多次),至少有两种可能:
- 您正在使用其他一些 curses 实现(例如,HPUX 之类的 Unix 实现)。如 X/Open 中所述,可移植程序不得多次调用 initscr。
TERM
变量未设置为可用值。像往常一样,manual page 解释了该函数的作用,以及它可能失败的原因。