У меня возникли проблемы с этой программой. Кто-нибудь видит, что я делаю не так? Довольно новый для этого - PullRequest
0 голосов
/ 30 апреля 2018

Не удается правильно запустить этот прогон. У меня возникли проблемы с этой программой. Кто-нибудь видит, что я делаю не так? Довольно новый для этого. Я пытался весь день, чтобы понять это правильно. и я разочарован без конца прямо сейчас. Если кто-нибудь увидит, что я делаю неправильно, я буду очень признателен.

main ()
    {
    int adultTickets = 0, seniorTickets = 0, childTickets = 0, infantTickets = 0, baggage = 0, age = 0, passengerTotal = 0;
    double totalBaggagefee = 0.0, baggageFee1 = 20.00, baggageFee2 = 35.00, adultFee = 147.30, seniorFee = 137.75, childFee = 110.25, infantFee = 0.0, totalTicket = 0.0, totalwithCheckedbaggage = 0.0;
    char reply;
    string input;
    cin >> input;
    string Yes = "YES";
    string No = "NO";
    string quit = "QUIT";

    cout << "Enter your age. ";
    cin >> age;
    if (age > 18);
    {
        cout << "You are old enough to buy a ticket." << endl;
        cout << "Would you like to purchase a ticket now? ";
        cin >> reply;

            if (input == Yes);
            {
                cout << "How many Adult Tickets? "; 
                cin >> adultTickets;
                cout << "How many Senior Tickets? "; 
                cin >> seniorTickets;
                cout << "How many Child Tickets? "; 
                cin >> childTickets;
                cout << "How many Infant Tickets? "; 
                cin >> infantTickets;
                cout << "Number of checked baggage? "; 
                cin >> baggage;
                cout << endl;

                    if (baggage <= passengerTotal);
                        totalBaggagefee = passengerTotal*baggageFee1;
                        totalTicket = (adultTickets*adultFee)+(seniorTickets*seniorFee)+(childTickets*childFee)+(infantTickets*infantFee);
                        totalwithCheckedbaggage = totalTicket+totalBaggagefee;
                    {    
                        cout << "Your total including check baggage is " << totalwithCheckedbaggage << "" << endl;
                    }    
                    else (baggage >= passengerTotal);
                        totalBaggagefee = passengerTotal * baggageFee1 + 1 * baggageFee2;
                        totalTicket = (adultTickets*adultFee)+(seniorTickets*seniorFee)+(childTickets*childFee)+(infantTickets*infantFee);
                        totalwithCheckedbaggage = totalTicket+totalBaggagefee;
                    {    
                        cout << "Your total including check baggage is " << totalwithCheckedbaggage << "" << endl;
                    }
            else (input == No);
            {
                cout << "You are a minor, have an adult purchase your ticket. ";
                cout << "Thank you." << endl;
            }    
                cout << "Type quit to end. ";
                cin >> reply;
                cout << endl;
                exit(1);
    }            
    else if (age<18);
    {
        cout << "You are too young, have an adult buy your ticket. " << endl;
    }

            return 0;

            }}

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Ваши проблемы с синтаксисом 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, если больше нечего делать.

0 голосов
/ 30 апреля 2018

Одна проблема, которую я вижу, состоит в том, что вы ставите точки с запятой ";" после операторов if, else и else if. Удалить их.

Вы можете написать оператор if-else с фигурными скобками или без них. Если вы пишете это без скобок, выполняется только первая часть кода до следующей точки с запятой, если оператор if оценивается как true. Если вы используете фигурные скобки, вы можете определить целый набор операторов внутри этого блока фигурных скобок. Строки кода внутри этого блока выполняются, когда выражение внутри оператора if принимает значение true.

Взять, к примеру, следующее выражение if:

int age = 22;
if(age > 18) cout << "Hello World" << endl;
{
cout << "Inside block" << endl;
}

В этом случае «Внутренний блок» печатается каждый раз. Даже если возраст меньше или равен 18. Строка «Hello World» печатается только в том случае, если возраст превышает 18.

Так что, если вы ставите точку с запятой после оператора if-else, в основном ничего не происходит, потому что это совершенно допустимое выражение, которое ничего не делает.

Давайте возьмем первое if-выражение, например. Вместо:

if(age > 18);
{

Вы пишете:

if(age > 18) {

Всякий раз, когда вы объявляете блок фигурными скобками, вам обычно не нужно ставить точку с запятой до или после блока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...