C++ 案例密钥输入未按预期运行

C++ 案例密钥输入未按预期运行,c++,ncurses,C++,Ncurses,我正在尝试创建一个程序来响应键盘输入。目前,下面的菜单功能正常,但按enter键后,我遇到了问题。当我按下回车键时,什么也没发生。我只是想知道为什么会这样? 非常感谢 #include <ncurses.h> #define MENUMAX 6 void drawmenu(int item) { int c; char mainmenu[] = "Menu"; char menu[MENUMAX] [10] = {

我正在尝试创建一个程序来响应键盘输入。目前,下面的菜单功能正常,但按enter键后,我遇到了问题。当我按下回车键时,什么也没发生。我只是想知道为什么会这样? 非常感谢

#include <ncurses.h>

#define MENUMAX 6

void drawmenu(int item)
{
        int c;
        char mainmenu[] = "Menu";
        char menu[MENUMAX] [10] = {
                "1",
                "2",
                "3",
                "4",
                "5",
                "6"
        };

        clear();
        attron(A_BOLD | A_UNDERLINE);
        addstr(mainmenu);
        attroff(A_BOLD | A_UNDERLINE);
        for( c = 0; c < MENUMAX; c++)
        {
                if( c == item)
                        attron(A_REVERSE);
                attron(A_BOLD);
                mvaddstr(3 + (c * 2), 20, menu[c]);
                attroff(A_BOLD);
                attroff(A_REVERSE);
        }
        refresh();
}

int main(int argc, char *argv[])
{
        int key, menuitem;
        menuitem = 0;
        initscr();
        drawmenu(menuitem);
        keypad(stdscr, TRUE);
        noecho();
        do
        {
                raw();
                nonl();
                key = getch();
                switch(key)
                {
                        case KEY_DOWN:
                                menuitem++;
                                if(menuitem > MENUMAX - 1) menuitem = 0;
                                break;
                        case KEY_UP:
                                menuitem--;
                                if(menuitem < 0) menuitem = MENUMAX - 1;
                                break;
                        case KEY_ENTER:
                                mvaddstr(17, 25, "Test mesage!");
                                refresh();
                                break;
                        default:
                                break;
                }
                drawmenu(menuitem);
        } while(key != '~');

        echo(); 


        endwin();
        return 0;
}
#包括
#定义菜单6
无效绘图菜单(int项)
{
INTC;
char main Menu[]=“菜单”;
字符菜单[MENUMAX][10]={
"1",
"2",
"3",
"4",
"5",
"6"
};
清除();
attron(粗体|下划线);
addstr(主菜单);
attroff(粗体|下划线);
对于(c=0;cMENUMAX-1)menuitem=0;
打破
案例编号:
menuitem--;
如果(menuitem<0)menuitem=MENUMAX-1;
打破
大小写键输入:
mvaddstr(17,25,“测试表!”);
刷新();
打破
违约:
打破
}
绘图菜单(菜单项);
}while(key!='~');
回声();
endwin();
返回0;
}

该程序未提供每次字符(无缓冲)输入,如ncurses手册页面的章节所述。因为它寻找特殊的键,比如
KEY\u UP
,这意味着它应该使用(而不是
raw
,这会阻止ncurses解码特殊的键)。

所以我要替换
break带有
cbreak
cbreak
(参见我答案中的手册页链接)是一个函数。它以一种常见的终端模式命名。似乎为术语提供了有用的介绍。