2

まず、ユーザーが選択できるメニューを表示しています。彼らが選択すると、いくつかのコードが実行され、彼らが別の選択を行えるように、同じメニューをもう一度表示したいと思います。

これはこれまでの私のコードです:

//call the menu function and put it in a variable which will be used in the switch case statements
menu_selection = main_menu();

condition_main = true;

while (condition_main) {    
    switch (menu_selection) {
        case 1: display(primes);
                menu_selection = main_menu();

        case 2: display(fibos);
                menu_selection = main_menu();

        case 3: display(primes_and_fibos);
                menu_selection = main_menu();

        case 4: display(primes_not_fibos);
                 menu_selection = main_menu();

        case 5: display(fibos_not_primes);
                 menu_selection = main_menu();

        case 6: search();
                 menu_selection = main_menu();

        case 7: condition_main = false;
                             return 0; //this exits the program
        default: cout << "\nThat is an invalid option. Please try again.\n\n";

    } 
}

ただし、プログラムを実行すると、オプション1を選択するとコードが実行され、メニューが再度表示されますが、オプション1を再度選択すると、オプション2用に設計されたコードが実行されます。また、do whileループを試しましたが、ループをまったく使用していませんでしたが、何も機能していないようです。どんな助けでもありがたいです、ありがとう。

4

4 に答える 4

3

私は同意します、休憩がありません。次のようなコード構造を検討することをお勧めします:(コンパクトを目指していたので、フォーマットはあまり良くありません)

do {
   menu_selection = main_menu();
   switch (menu_selection) {
   case 1 : display(primes);            break;
   case 2 : display(fibos);             break;
   case 3 : display(primes_and_fibos);  break;
   case 4 : display(primes_not_fibos);  break;
   case 5 : display(fibos_not_primes);  break;
   case 6 : search();                   break;
   case 7 : break;
   default: cout << "\nThat is an invalid option. Please try again.\n\n";
} while (condition_main != 7);
return 0;

(もちろん、好みの形式になっています。)これにより、メニュー関数を1回呼び出すだけで、メンテナンスがはるかに簡単になります。これreturnは関数の最後にもあり、ほとんどの人がそれを見つけることを期待しています。

于 2013-03-11T12:16:33.823 に答える
2

ある条件を次の条件にフォールスルーさせたい場合を除いて、各ケースには休憩が必要です。

switch (menu_selection) {
    case 1: display(primes);
            menu_selection = main_menu();
            break ;

    case 2: display(fibos);
            menu_selection = main_menu();
            break ;

    case 3: display(primes_and_fibos);
            menu_selection = main_menu();
            break ;

    case 4: display(primes_not_fibos);
             menu_selection = main_menu();
            break ;

    case 5: display(fibos_not_primes);
             menu_selection = main_menu();
            break ;

    case 6: search();
             menu_selection = main_menu();
            break ;

    case 7: condition_main = false;
                         return 0; //this exits the program
    default: cout << "\nThat is an invalid option. Please try again.\n\n";
            break ;
} 

このリファレンスにはさらに多くのswitch例があり、フォールスルーケースもカバーしています。

スティーブが示唆したように、ステートメントのreturn後にある方がおそらくより理にかなっています。whileこれは予想される制御フローであり、保守も容易になる可能性があります。呼び出しをスイッチからループに移動するmain_menuと、後でコードを変更しやすくなります。

于 2013-03-11T12:13:20.843 に答える
0

sを追加breakすると、問題が「修正」されます。

ただし、テストを容易にするために、コードを分離することをお勧めします。その時、あなたは自分で問題に気づいたかもしれません。

入力と処理コードを分離します。

bool handleSelection(int menu_selection) {
    switch (menu_selection) {
        case 1: display(primes);
        case 2: display(fibos);
        case 3: display(primes_and_fibos);
        case 4: display(primes_not_fibos);
        case 5: display(fibos_not_primes);
        case 6: search();
        case 7: return false;
        default: cout << "\nThat is an invalid option. Please try again.\n\n";
    }
    return true;
}

void pump() {
    int menu_selection = main_menu();
    while(handleSelection(menu_selection)) {    
        menu_selection = main_menu();
    }
}

int main() {
    //pump();
    handleSelection(3);    
}

おそらく出力コードも分離する必要がありますが(「これは無効なオプションです。もう一度やり直してください」)、それを行わずに主張したと思います。

于 2013-03-11T12:30:55.730 に答える
0
boolean condition = true;
while(condition==true){
System.out.println("Press Number \n 1 for check prime \n 2 for exit");
Scanner scannerOption = new Scanner(System.in);
    int option = scannerOption.nextInt();

    switch (option){
        case 1:
            checkPrime();
            break;
        case 2:
            condition = false;
            break;
        default:
            System.out.println("Wrong Enter plz try again");

    }
}
于 2015-12-01T10:56:12.447 に答える