Ваши проблемы с синтаксисом if
и if-else
.
В C ++ условие if()
контролирует следующий оператор и только следующий оператор.
Просто чтобы держать вас в тонусе, «следующее утверждение» может быть пустым.
То есть if(input == YES);
означает «если ввод "YES"
, ничего особенного и продолжай».
if
, за которым следует пустой оператор, не очень полезен, но синтаксис допускает это.
Если вы хотите, чтобы if()
управлял несколькими операторами, вы вводите блок (который действует как отдельный оператор в этом отношении).
Блоки представляют собой наборы операторов, окруженные {
и }
if (baggage <= passengerTotal);
totalBaggagefee = passengerTotal*baggageFee1;
totalTicket = (adultTickets*adultFee)+/*...*/;
totalwithCheckedbaggage =totalTicket+totalBaggagefee;
{
cout << "Your total including check baggage is " <<
totalwithCheckedbaggage << "" << endl;
}
else (baggage >= passengerTotal);
Должно быть:
if (baggage <= passengerTotal){//<---- Start block following condition!
totalBaggagefee = passengerTotal*baggageFee1;
totalTicket = (adultTickets*adultFee)+/*...*/;
totalwithCheckedbaggage =totalTicket+totalBaggagefee;
cout << "Your total including check baggage is " <<
totalwithCheckedbaggage << "" << endl;
} else if (baggage >= passengerTotal)
Обратите внимание, что я заменил некоторый код на /*...*/
, чтобы он хорошо подходил к экрану.
Также обратите внимание, что я изменил предложение else
.
До того как else не совпал с if
, потому что if
завершил несколько операторов назад (из-за ошибки с if() ;
).
Но вторая проблема была else (baggage>=passengerTotal);
и ничего не делает.
В C ++ вы можете просто использовать выражение как утверждение. Этот код проверит условие и проигнорирует результат! Добро пожаловать в C ++.
else
не является неявным else-if
, поэтому вы должны явно сделать предложение else
оператором if
, используя else if
.
Похоже, что есть ряд подобных ошибок, но я оставлю вам возможность привести их в порядок.
На заметке о стиле я рекомендую использовать только
if(){
}
или
if(){
} else {
}
А если вам нравится
if(){
}else if (){
}
При необходимости их можно объединить в цепочки:
if(){
}else if (){
}else {
}
То есть всегда , следуйте if()
блоком операторов и игнорируйте, что если это один оператор, вам не нужен { }
. Я стремлюсь облегчить чтение.
Почему такие вещи, как if(flag==true);
действительны? Вероятно, исторические причины унаследованы от синтаксиса C, который был простым на крошечных машинах, на которых он был разработан. if(flag==true);
- это то же самое, что и (flag==true);
, и если нет побочных эффектов (возможно, но очень неразумно), то оба ничего не делают.
Если вы когда-нибудь захотите ввести пустой оператор или блок, я рекомендую комментарий.
if(condition){
/* Does nothing.*/
}
Это не очень полезно в операторе if, но вы видите конструкции вроде:
while(do_a_thing()){
/*Do nothing*/
}
Если do_a_thing()
возвращает false
, если больше нечего делать.