我使用Linux和ncurses为我的应用程序,我使用getch作为非阻塞使用nodelay。问题是,当使用getch循环输入时,它总是错过第一个字符。例如,输入“Helloworld”将打印为“elloworld”。 我现在似乎没有看到任何问题,但也许是因为我一直盯着代码很长时间,或者我错过了一些东西。
while(TRUE)
{
gchar chr;
gchar *cmd = g_malloc(50);
if((getch()) == ERR)
{
// no user input
}
else
{
gint i = 0;
while((chr = getch()) != '\n')
{
cmd[i] = chr;
waddch(ncurse->window, chr);
wrefresh(ncurse->window);
i++;
}
waddstr(ncurse->log, cmd);
wrefresh(ncurse->log);
wmove(ncurse->window, ncurse->window->_maxy, 2);
wclrtoeol(ncurse->window);
wrefresh(ncurse->window);
}
g_free(cmd);
}
答案 0 :(得分:2)
你期待什么?
if((getch()) == ERR)
{
// no user input
}
丢弃第一个字符(如果有的话)。