在循环中执行initscr()会导致错误初始化
我正在尝试制作一个简单的ncurses程序来显示一个包含消息的框。我遵循这一点,它工作得很好。我遇到的问题是,如果我把整个代码放在一个函数中,并在循环中调用它,那么初始化就是有错误的。据我所知,如果在函数末尾调用在循环中执行initscr()会导致错误初始化,c,ncurses,curses,C,Ncurses,Curses,我正在尝试制作一个简单的ncurses程序来显示一个包含消息的框。我遵循这一点,它工作得很好。我遇到的问题是,如果我把整个代码放在一个函数中,并在循环中调用它,那么初始化就是有错误的。据我所知,如果在函数末尾调用endwin(),再次调用initscr()应该不会有任何问题。我是否缺少一个函数来再次调用initscr() 代码如下: #include <stdio.h> #include <unistd.h> #include <stdlib.h> #incl
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;
}
#包括
#包括
#包括
#包括
int call()
{
窗口*mainwin,*childwin;
int-ch;
如果((mainwin=initscr())==NULL){
fprintf(stderr,“初始化ncurses时出错。\n”);
退出(退出失败);
}
noecho();
curs_set(假);
键盘(mainwin,TRUE);
mvaddstr(childwin,1,6,“警告!按q退出”);
mvaddstr(childwin,2,15,“{OK}”);
刷新();
而((ch=getch())!='q'){
刷新();
}
德尔温(缅因州);
endwin();
刷新();
返回退出成功;
}
int main()
{
int i;
对于(i=0;i示例程序不会调用多个initscr
。但是,它也不会显示#include
行(编译所必需的),因此可能实际运行的不是该程序
关于调用initscr
(一次或多次)时出现的问题,至少有两种可能性:
- 您正在使用其他一些curses实现(例如,Unix实现,如HPUX)。如中所述,可移植程序不能多次调用initscr
术语
变量未设置为可用值。通常,解释函数的功能以及它可能失败的原因
可以在这里共享错误消息吗?@niyasc它只打印我在代码中写的错误。初始化ncurses时出错intscr在一个函数中,我反复调用该函数。这不意味着initscr被调用了不止一次吗?总之,您指出的事情确实帮助我解决了这个问题。非常感谢!