Я кодирую свой путь к последнему проекту семестра, и у меня проблема с дублированием кода. Я использую ncurses
или pdcurses
, чтобы создать меню для взаимодействия с пользователем.Сокращение кода на C++ для идентичных подменю
Проблема: для каждого выбора меню (всего пять) мне нужно подменю. Единственное отличие подменю от главного меню - массив 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);
}
Спасибо.
p.s Код из книги. У меня мало опыта работы с ncurses, так что не слишком сильно на меня: P. Я просто хочу, чтобы мой последний код проекта был лучше :).
это может вас заинтересовать - http://meta.stackexchange.com/questions/10811/how-do-i-ask-and-answer-homework-questions –
Это было действительно полезно. –