我正在编写本学期最后一个项目的代码,但我遇到了代码重复问题。我正在使用ncurses
或pdcurses
制作一个菜单来与用户交互。
问题:对于菜单的每个选择(总共五个)我需要一个子菜单。子菜单与主菜单的唯一区别是要打印的数组,以及由于数组大小Items
而进入某些函数的参数。Items
因为我需要五个子菜单,所以我需要五次相同的代码(如果添加主菜单,则需要六次)。
你们谁能帮我做一个做同样事情的函数,然后我会调用六次来创建我的菜单?
这是我的代码
void Menu(){
const char* Items[]={
"[1]...New tax declaration",
"[2]...Modify tax declaration",
"[3]...Cancel tax declaration",
"[4]...Additional Information",
"[5]...Exit"
};
int Cur=0;
int ch, i;
int flag=0;
do{
werase(wm);
mvwaddstr(wm, 2, 16, "MENU");
for(int i=0; i<5;i++){
if(i==Cur)
wattr_on(wm, A_REVERSE, 0);
mvwaddstr(wm, 4+i, 4, Items[i]);
wattr_off(wm, A_REVERSE, 0);
}
mvwaddstr(wm, 14, 3, "Choice: ");
wprintw(wm, "%1d", Cur+1);
wrefresh(wm);
ch=wgetch(wm);
switch(ch){
case '1':Cur=0;Sub2();break;
case '2':Cur=1;Sub1();break;
case '3':Cur=2;break;
case '4':Cur=3;break;
case '5':flag=1;break;
case KEY_UP:
case KEY_LEFT: Cur--; if (Cur<0) Cur=4; break;
case KEY_DOWN:
case KEY_RIGHT: Cur++; if(Cur>4) Cur=0; break;
case 27: flag=1; break;
case 32:
case 13:
switch (Cur){
case 0:Sub2();break;
case 1:Sub1();break;
case 2:break;
case 3:break;
case 4:flag=1;break;
}
}
}while(!flag);
}
谢谢你。
ps 代码来自一本书。我对ncurses的经验很少