2017-04-03 6 views
-1
#include "Menu.h" 
#include <iostream> 
#include <stdio.h> 
#include <string> 


void Menu::displayMenu() { 
    cout << " 1. New User login \n 2. View available vehicles \n 3. Return Vehicle \n 4. Exit Program \n"; 

    char choice; 
    cin >> choice; 

main: 
    switch (choice) { 
    case '1': //new user option 
     login(); 
     break; 


    case '2': //This will be the option for viewing available cars. each choice in this switch will lead to car info and choice to rent. 

    carmenu: 
     cout << "Now viewing available vehicles...Select vehicle for further information...\n"; 
     cout << " 1. Toyota Carolla \n 2. Toyota Rav4 \n 3. Toyota Prius \n 4. Ford Mustang \n 5. Ford Transit \n 6. Main Menu \n"; 
     char rent; 
     char carchoice; 
     cin >> carchoice; 
     switch (carchoice) { 
     case '1': 
      cout << "Toyota Carolla..\n Passenger class \n 30 MPG \n 4 Doors \n"; 
      cout << "Enter Y to rent vehicle or enter N to return to car selection...\n"; 
      cin >> rent; 
      if (rent == 'Y') { 
       //construct 

      } 
      else if (rent == 'N') { goto carmenu; }; 

     case '2': 
      cout << "Toyota Rav4..\n Passenger class \n 24 MPG \n 5 Doors \n"; 
      cout << "Enter Y to rent vehicle or enter N to return to car selection...\n"; 
      cin >> rent; 
      if (rent == 'Y') { 
       //call passenger car constructor called Rav4 with proper data entries. 

      } 
      else if (rent == 'N') { goto carmenu; }; 
      break; 

     case '3': 
      cout << "Toyota Prius.. \n Passenger class \n 54 MPG \n 4 Doors \n"; 
      cout << "Enter Y to rent vehicle or enter N to return to car selection...\n"; 
      cin >> rent; 
      if (rent == 'Y') { 
       //call passenger car constructor called Prius with proper data entries. 

      } 
      else if (rent == 'N') { goto carmenu; }; 
      break; 

     case '4': 
      cout << "Ford Mustang.. \n Passenger class \n 18 MPG \n 2 Doors \n"; 
      cout << "Enter Y to rent vehicle or enter N to return to car selection...\n"; 
      cin >> rent; 
      if (rent == 'Y') { 
       //call passenger car constructor called Mustang with proper data entries. 
       break; 
      } 
      else if (rent == 'N') { goto carmenu; }; 
      break; 

     case '5': 
      cout << "Ford Transit ..\n Cargo class \n 14 MPG \n"; 
      cout << "Enter Y to rent vehicle or enter N to return to car selection...\n"; 
      cin >> rent; 
      if (rent == 'Y') { 
       Cargo van(14); 
       van.set_purpose(); 

      } 

      else if (rent == 'N') { goto carmenu; }; 

     case '6': 
      goto main; 


     }//second switch 

    }//first switch 
}//function end 

これはあまりにも読みにくくないことを願っています...私は会社のレンタカープログラムを設計しなければならないプロジェクトを行っています。メインメニューの第2のケースでは、どのタイプの車をレンタルするかを選択できるメニューにユーザを連れて行く。メニューは完全には終了していませんが、私は車選択メニューのオプション5のクラスを修了しました。車がレンタルされると(Y文が入力された場合)、貨物のコンストラクタが正しく呼び出されますが、目的の入力後すぐにプログラムが終了するか、レンタカーページに戻ります。私は休憩を取る場所や声明に行く場所を知らない。誰でも助けることができますか?ネストされたスイッチの中にブレークして配置する

+2

サブ関数で分割されていて、 'goto'は必要ありません。 – Jarod42

+2

*これはあまりにも読みにくくないことを望みます。* - それは 'goto'を使っています。誰も潜在的な[スパゲティコード](https://en.wikipedia.org/wiki/Spaghetti_code) – PaulMcKenzie

答えて

0

それぞれのケースの最後にbreakを置くことで、現在のケースの下のケースから抜け出し、残りのコードを実行します。あなたの家賃の選択肢に 'Y'を入力すると、変数choiceは決して割り当てられないので、プログラムは再びカーメニューに戻ります。したがって、変数は '2'のままです。 「N」を入力すると、goto carmenuのために車の選択に戻ります。他のすべての入力については、あなたはelse caseを持っていないので、プログラムはブレーク後に単に終了します。

gotoではなく、コードを関数に分割することをお勧めします。このようなバグに遭遇した場合には、理解して理解しやすくなります。

関連する問題