-8

Я пытаюсь сделать оператор switch внутри оператора if/else. Это не работает. Я не уверен, что это потому, что зарезервированное слово «break», которое я использую внутри оператора switch, выводит меня из функции. Пожалуйста помоги!!!Может ли программа C++ иметь оператор switch внутри оператора if/else

/* Date : March 3, 2015 
    Date Due : March 23, 2015 
    Program Name: Hospital Calculator 
    Description: This program will ask the user to enter several information 
    related to his/her room floor measurements. After that, it will generate 
    a bill that will tell the customer the price for the carpet job. 
    */ 

    #include <iostream> 
    #include <iomanip> 
    #include <string> 
    #include <cmath> 
    #include <cctype> 

    //Constants 
       // Room Rates 
    const float SINGLE_ROOM = 525.00, 
       DOUBLE_ROOM = 325.00, 
       WARD   = 550.00, 
       //Phone Access Rates 
       SHARED_LINE = 2.95, 
       DEDICATED_LINE = 5.95, 
       //Television Rates 
       BASIC_CHANNELS = 2.95, 
       CABLE_CHANNELS = 5.95; 

    using namespace std; 

    //Prototypes 
    void getdata(string &, int &); 
    float get_room (int, string &); 
    float get_phone(int days, string &); 


    int main() 
    { 
    string name, 
      room_type, 
      phone_type, 
      tv_type; 

    int days; 

    float room_charges, 
      phone_charges, 
      tv_charges; 

    //The ones below are subfuntions calls that devide each section  

    //Input section (call) 
    getdata(name,days); 
    //room_charges = 
    //room_charges = get_room(days,room_type); 
    phone_charges = get_phone(days, phone_type); 
    cout << phone_charges << endl; 
    cout << phone_type << endl; 

    /*tv_charges = get_tv(days, tv_type); 
    print(name, days, room_charges, phone_charges, tv_charges); 
    */ 

    cin.get(); 
    cin.ignore(); 
    return 0; 
    } 

    // Input Section 
    //This function takes the information needed from the user 
    void getdata(string & name, int & days) 
    { 
    string symbol; 

    symbol.assign (50, '*'); 
    cout << symbol<< endl; 
    cout << right << setw(22) << "\tCustomer's Name\t\t\t: "; 
    getline (cin,name); 
    cout << right << setw(22) << "\tNumber of days in the hospital\t\t: "; 
    cin >> days; 
    cout << symbol << endl; 
    cin.ignore(); 
    } 

    float get_room (int days, string & room_type) 
    { 
     string choice; 
     char ch; 
     float room_charges; 
     cout << "\n\n\t\t\tRoom Used\n"; 
     cout <<  "\t\t\t________\n\n"; 
     cout << fixed << setprecision (2); 
     cout << "\t1- Single room-One bed \t"<< SINGLE_ROOM <<"\n\n"; 
     cout << "\t2- Double room-Two beds\t"<< DOUBLE_ROOM <<"\n\n"; 
     cout << "\t3- Ward    \t"<< WARD <<"\n\n"; 
     cout << "\t Enter Choice 1, 2, or 3 : "; 
     getline(cin, choice); 
     cin.ignore(); 
     ch = toupper(choice[0]); 

     if (ch == '1' or ch == 'S') 
     { 
      room_charges = SINGLE_ROOM * days; 
      room_type = "in a Single Room"; 
     } 

     else if (ch == '2' or ch == 'D') 
     { 
      room_charges = DOUBLE_ROOM * days; 
      room_type = "in a Double Room"; 
     } 

     else if (ch == '3' or ch == 'W') 
     { 
      room_charges = WARD * days; 
      room_type = "in a Ward"; 
     } 



     return room_charges; 

    } 

    float get_phone(int days, string & phone_type) 

    { 
     string prompt, 
      choice; 
     char pr, ch; 
     float phone_charges; 
     cout << "Would you like Phone Access (Y/N): "; 
     cin >> prompt; 
     pr = toupper(prompt[0]); 

     if (pr == 'Y') 
     { 
      cout << "\n\n\t\t\tPhone Access\n"; 
      cout <<  "\t\t\t________\n\n"; 
      cout << "\t1- Shared \t" << SHARED_LINE <<"\n\n"; 
      cout << "\t2- Dedicated\t"<< DEDICATED_LINE <<"\n\n"; 
      cout << "\t Enter Choice 1 or 2: "; 
      getline(cin, choice); 

      ch = toupper(choice[0]); 

      if (ch == '1' or ch == 'S') 
      { 
       phone_charges = (SHARED_LINE * days); 
       phone_type = "(Shared)"; 

      else if (ch == '2' or ch == 'D')  
      case '2': 
      case 'D':   
       { 
       phone_charges = (DEDICATED_LINE * days); 
       phone_type = "(Cable)"; 
       break; 
       } 


      } 


     }  

     else if (pr == 'N') 
     { 
      phone_charges = 0.00; 
      phone_type = "None"; 
     } 

     cin.ignore(); 
      return phone_charges; 

    } 
+2

Не могли бы вы не уменьшить это до простого примера кода, который показывает проблему? Помогите нам помочь вам. –

+1

Я не вижу инструкции 'switch' в вашем коде, только несколько операторов' case'. Они должны использоваться внутри 'switch'. – Galik

+1

Ум, у вас нет 'switch' внутри' if/else'. У вас есть элементы 'switch'' case' внутри 'if', которые, как я полагаю, дают вам ошибку компиляции по уважительной причине. Оператор 'switch' обычно начинается с ключевого слова' switch (...) ... '. В частности, 'switch (ch) {' после вашего 'if (ch == '2' || ch == 'D')'. Если вы правильно выполняете 'switch', вы можете использовать его внутри блока' if/else'. – lurker

ответ

2

Оператор переключения здесь не нужен. Но чтобы сохранить то, что у вас уже есть, вот некоторые исправления. Вам не хватает нескольких скобок и самого switch(ch).

 if (ch == '1' or ch == 'S') 
     { 
      phone_charges = (SHARED_LINE * days); 
      phone_type = "(Shared)"; 
     } //<----- missing this 
     else if (ch == '2' or ch == 'D') 
     { 
      switch(ch) //<----- missing this 
      {  //<------and this 
       case '2': 
        //currently doing nothing, falls through to case 'D': 
        //break; <-----add this for the time being? 
       case 'D':   

        phone_charges = (DEDICATED_LINE * days); 
        phone_type = "(Cable)"; 
        break; 


      }/// <-----and this 
     } 
1

Вы не использовали ключевое слово 'switch'. Код должен выглядеть

else if(ch == '2' or ch == 'D'){ 
    switch(ch){ 
    case '2': 
     break; 
    case 'D': 
     phone_charges = (DEDICATED_LINE * days); 
     phone_type = "(Cable)"; 
     break; 
    } 
} 

Я не уверен, если вы намеревались оставить дело на «2» пустым, но не имеющие перерыв в каждом случае, если результаты в падении через.

+0

Это заставило бы его скомпилировать, но я сомневаюсь, что код «должен» выглядеть так! –

+0

Когда я сказал «должен», я указывал конкретно на конструкцию «switch-case». – shark1608

Смежные вопросы