gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:27:49 27 4
gpt4 key购买 nike

我正在尝试制作一个简单的 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 实现(例如,Unix 的 HPUX)。如 X/Open 中所述, 可移植程序不得多次调用 initscr
  • TERM 变量未设置为可用值。像往常一样,manual page解释函数的作用,以及它可能失败的原因。

关于c - 在循环中执行 initscr() 会导致错误初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29643713/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com