在循环中执行initscr()会导致错误初始化

在循环中执行initscr()会导致错误初始化,c,ncurses,curses,C,Ncurses,Curses,我正在尝试制作一个简单的ncurses程序来显示一个包含消息的框。我遵循这一点,它工作得很好。我遇到的问题是,如果我把整个代码放在一个函数中,并在循环中调用它,那么初始化就是有错误的。据我所知,如果在函数末尾调用endwin(),再次调用initscr()应该不会有任何问题。我是否缺少一个函数来再次调用initscr() 代码如下: #include <stdio.h> #include <unistd.h> #include <stdlib.h> #incl

我正在尝试制作一个简单的ncurses程序来显示一个包含消息的框。我遵循这一点,它工作得很好。我遇到的问题是,如果我把整个代码放在一个函数中,并在循环中调用它,那么初始化就是有错误的。据我所知,如果在函数末尾调用
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被调用了不止一次吗?总之,您指出的事情确实帮助我解决了这个问题。非常感谢!