2013-11-07 4 views
0

У меня есть программа на C++, в которой я должен реализовать оператор switch в программе. По какой-то причине я не знаю, что инструкция switch не выполняется. Вся программа выглядит следующим образом: http://pastebin.com/VxXFhGkQ.Оператор switch не выполняется

Часть программы, которая у меня возникли проблемы с выглядит следующим образом,

void processCharges() // function to calculate charges 
{ 
    int charges = 0; 

    // switch statement cannot be applied to strings :(
    if(vehicle == "C") 
    { 
     cout << "TYPE OF VEHICLE: CAR" << endl; 
     cout << "TIME IN: " << hh << ":" << mm << endl; 
     cout << "TIME OUT: " << hhout << ":" << mmout << endl; 
     cout << "======================================" << endl; 

     thh = hhout - hh; 

     tmm = mmout - mm; 

     int tthh = 0; 

     if(tmm > 0) 
     { 
      tthh = thh + 1; 
     } 
     else tthh = thh; 

     cout << "TOTAL TIME PARKED: " << tthh << endl; 

     switch(tthh) { 
     case 1: 
      if(tthh <= 3) { 
       charges = 0; 
       cout << "TOTAL CHARGES:$"<<charges << endl; 
       break; 
      } 
     case 2: 
      if(tthh >= 4) { 
       charges = tthh * 1.25; 
       cout << "TOTAL CHARGES:$"<<charges << endl; 
       break; 
      } 

     } 
    } 
} 
+0

'транспортное средство' типа 'std :: string', право? – dasblinkenlight

+0

есть автомобиль есть. – Chris

+2

этот 'switch (tthh) { case 1: if (tthh <= 3) {' на самом деле не имеет никакого смысла. – njzk2

ответ

4
switch(tthh) 
{ 
    case 1: 
    case 2: 
    case 3: 
     charges = 0; 
     cout << "TOTAL CHARGES:$"<<charges << endl; 
     break; 
    default: 
     charges = tthh * 1.25; 
     cout << "TOTAL CHARGES:$"<<charges << endl; 
     break; 

} 
+0

Имейте в виду, что tthh имеет тип int. Попытайтесь использовать unsigned int или проверить отрицательное число перед использованием коммутатора. – IntStarFoo

1

Видимо ваша переменная tthh имеет другое значение, чем 1 или 2. Для того, чтобы выяснить, что значение добавить default в ваш оператор switch с заявлением на печать и распечатайте его значение.

+0

Вы говорите, что я должен сделать случай для каждого значения tthh? – Chris

+0

Вот что значит 'switch'. Если вы хотите проверить диапазоны, используйте 'if's. – piokuc

1

Ваше деловое заявление написано ненадлежащим образом. Вы можете просто вынуть переключатель и сделать его if else или if if if if if. Прямо сейчас он ищет tthh to == 1 || 2

+0

Может ли случай указать диапазон значений? – Chris

+0

вы сможете сделать этот случай (<4): здесь код. – Recursor

+0

Нет, я дважды проверил себя, и аргументы case не могут использовать неравенства в C++. Было бы проще перенести его в утверждение if, которое вы там создали. – Recursor

0

Вы включите tthh, проверить случай, когда он равен 1, то проверить, если оно меньше или равно 3 (который, очевидно, будет).

Затем вы проверите случай 2 и проверьте, если оно больше или равно 4, что не может быть b (с 2 < 4).

Так в основном, единственный случай, когда коммутатор делает вообще ничего, если tthh == 1.

Я хотел бы удалить переключатель вообще, так как я, кажется, не добавляет ничего.

0

Этот оператор switch не имеет большого смысла. См. Комментарии ниже.

switch(tthh) { 
    case 1: 
     if(tthh <= 3) { //THIS WILL ALWAYS BE TRUE BECAUSE tthh is 1 here 
      charges = 0; 
      cout << "TOTAL CHARGES:$"<<charges << endl; 
      break; 
     } 
    case 2: 
     if(tthh >= 4) { // THIS WILL NEVER BE TRUE BECAUSE tthh is 2 here 
      charges = tthh * 1.25; 
      cout << "TOTAL CHARGES:$"<<charges << endl; 
      break; 
     } 
} 
Смежные вопросы