私は学期の最後のプロジェクトに向かう途中でコードを作成しており、コードの重複問題があります。 ncurses
またはpdcurses
を使用して、ユーザーと対話するメニューを作成しています。同一のサブメニューのC++コードの削減
問題:メニューの各選択肢(合計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);
}
ありがとうございます。
p.sコードは書籍のものです。私はncursesで少し経験があるので、私にはあまりにも難しくありません:P。私はちょうど私の最終的なプロジェクトコードがより良い:)したい。
これはあなたにとって興味深いかもしれません - http://meta.stackexchange.com/questions/10811/how-do-i-ask-and-answer-homework-questions –
これは実際にはかなり役に立ちました。 –