Ncurses,非阻塞getch错过了第一个角色

时间:2013-07-11 18:13:48

标签: c linux nonblocking ncurses getch

我使用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);
}

1 个答案:

答案 0 :(得分:2)

你期待什么?

if((getch()) == ERR)
  {
    // no user input
  }

丢弃第一个字符(如果有的话)。