ncurses getch()跳过每一个字符

我用ncurses写了一个Tetris游戏,用getch()获得键盘input。 对于完成的游戏,nodelay()将被激活,但为了testing的目的,我已经注释掉了它。 出于某种原因,我的游戏循环所调用的input函数忽略了每个第二个字符。 例如,input'q'closures我的程序。 如果我inputaqaqaqaqaq序列…程序将永远不会closures,因为q不会注册。 下面是init的我的ncurses代码,下面是我的input函数的函数。

编辑:万一它很重要我正在testing运行在Windows上的virtualbox的Ubuntu中的代码。

****INIT FUNCTION**** void init_ui() { initscr(); cbreak(); raw(); keypad(stdscr, TRUE); noecho(); //nodelay(stdscr, TRUE); start_color(); init_pair(9, COLOR_BLACK, COLOR_RED); init_pair(2, COLOR_BLACK, COLOR_WHITE); init_pair(3, COLOR_BLACK, COLOR_CYAN); init_pair(4, COLOR_BLACK, COLOR_YELLOW); init_pair(5, COLOR_BLACK, COLOR_MAGENTA); init_pair(6, COLOR_BLACK, COLOR_BLUE); init_pair(7, COLOR_BLACK, COLOR_GREEN); init_pair(8, COLOR_BLACK, COLOR_BLACK); attron(COLOR_PAIR(6)); for(int i=0; i<HEIGHT; i++) { mvprintw(i, 0, "#%*c", WIDTH*2+1, '#'); } for(int i=0; i<=WIDTH; i++) { mvprintw(HEIGHT, i*2, "##"); } attroff(COLOR_PAIR(6)); } ****INPUT FUNCTION**** int get_input() { int ch = getch(); int result; switch(ch) { case KEY_LEFT: result = LEFT; break; case KEY_RIGHT: result = RIGHT; break; case KEY_DOWN: result = DOWN; break; case 'q': result = 'q'; break; default: result = DOWN; break; } return result; } 

原来,我在我的程序的另一部分留下了一个流浪的getch(),我忘了删除它。 只是我的一个愚蠢的错误。