我在阻止ncurses的getch()时遇到了一些问题。默认操作似乎是非阻塞的(或者我错过了一些初始化)?我希望它能像Windows中的getch()那样工作。我已经尝试过不同版本的
timeout(3000000);
nocbreak();
cbreak();
noraw();
etc...(不是在同一时间)。如果可能的话,我不希望(显式地)使用任何WINDOW。一个围绕getch()的while循环,检查特定的返回值也是可以的。
发布于 2009-05-25 02:11:54
诅咒库是一个套餐交易。在没有正确初始化库的情况下,您不能只提取一个例程并希望得到最好的结果。这是一段在getch()上正确阻塞的代码
#include <curses.h>
int main(void) {
initscr();
timeout(-1);
int c = getch();
endwin();
printf ("%d %c\n", c, c);
return 0;
}发布于 2009-05-25 01:44:02
来自a man page (已添加强调):
timeout和wtimeout例程为给定窗口设置阻塞或非阻塞读取。如果delay为负,则使用阻塞读取(即无限期等待输入)。
发布于 2009-05-25 02:08:07
您需要调用initscr()或newterm()来初始化curses,然后它才能工作。这对我来说很好:
#include <ncurses.h>
int main() {
WINDOW *w;
char c;
w = initscr();
timeout(3000);
c = getch();
endwin();
printf("received %c (%d)\n", c, (int) c);
}https://stackoverflow.com/questions/905060
复制相似问题