学期の最後のプロジェクトに向けてコーディングを行っていますが、コードの重複の問題があります。ncurses
またはを使用pdcurses
して、ユーザーとやり取りするメニューを作成しています。
問題: メニューの選択肢 (合計 5 つ) ごとに、サブメニューが必要です。メイン メニューとのサブメニューの唯一の違いは、出力される配列と、配列サイズItems
の結果として、いくつかの関数に入るパラメーターです。Items
5 つのサブメニューが必要なので、同じコードが 5 倍必要です (メイン メニューを追加すると 6 倍)。
メニューを作成するために 6 回呼び出す同じことを行う関数を作成するのを手伝ってくれる人はいますか?
これが私のコードです
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 の経験がほとんどない