gpt4 book ai didi

诅咒 - 对标准输入执行非阻塞检查 - C

转载 作者:行者123 更新时间:2023-12-04 06:39:40 28 4
gpt4 key购买 nike

我想处理来自 stdin 的管道/终端,但同时,我希望我的其他操作继续处理,例如 上/下菜单 .
fgets完成处理管道和屏幕渲染,但是,wgetch变得没有反应,所以我不能在开关内做任何事情。要关闭应用程序,我必须 CTRL+c.

#include <curses.h>
#include <menu.h>

char *choices[] = { "Choice 1", "Exit" };

int main()
{
ITEM **my_items, *cur_item;
MENU *my_menu;
int i, c;

initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);

FILE *fp = stdin;
char line [ 256 ];
while ( fgets ( line, sizeof line, fp) != NULL ) {
printw ( "%s", line);
}

my_items = (ITEM **)calloc(2 + 1, sizeof(ITEM *));
for(i = 0; i < 2; ++i)
my_items[i] = new_item(choices[i], choices[i]);
my_items[2] = (ITEM *)NULL;

my_menu = new_menu((ITEM **)my_items);
mvprintw(LINES - 2, 0, "F1 to Exit");
post_menu(my_menu);
refresh();

timeout(0);
while((c = wgetch(stdscr)) != KEY_F(1))
{ switch(c)
{ case KEY_DOWN:
menu_driver(my_menu, REQ_DOWN_ITEM);
break;
case KEY_UP:
menu_driver(my_menu, REQ_UP_ITEM);
break;
}
}

endwin();
}

最佳答案

尝试使用 selectfileno( stdin )告诉何时准备好从标准输入读取内容。

查看 this链接为一个例子。

另请记住,您必须使用已准备好从标准输入读取的内容,否则 select 将继续指示准备就绪。

另请注意,这不适用于 Windows。研究使用 PeekConsoleInput .

关于诅咒 - 对标准输入执行非阻塞检查 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4419555/

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