Как использовать int и double type? - PullRequest
0 голосов
/ 30 мая 2018

Вопрос enter image description here

Я хочу знать, что пошло не так с моим кодом.Он продолжает показывать 2.42092e-322 как результат после расчета.Я думал, что это потому, что я использую int calcFee, поэтому я изменил его на double calcFee, но он все еще показывает тот же результат.Не могли бы вы, ребята, указать, что пошло не так.

#include <iostream>
#include <iomanip>
using namespace std;
void detail();
double calcFee();
int main()
{
    double total_fee;
    detail();
    total_fee = calcFee();

    cout << "The total fee is RM " << total_fee << endl;
    return 0;
}

void detail()
{
    cout << "\t\t___________________________________________________________________________________" << endl;
    cout << "\t\t|  Participant Category\t|\tParticipant Type\t|    Fee per Member(RM)   |" << endl;
    cout << "\t\t|_______________________|_______________________________|_________________________|" << endl;
    cout << "\t\t|\t    S\t\t|\t\t1\t\t|\t   50.00\t  |" << endl;
    cout << "\t\t|\t\t\t|_______________________________|_________________________|" << endl;
    cout << "\t\t|\t\t\t|\t\t2\t\t|\t   75.00\t  |" << endl;
    cout << "\t\t|_______________________|_______________________________|_________________________|" << endl;
    cout << "\t\t|\t    T\t\t|\t\t1\t\t|\t  100.00\t  |" << endl;
    cout << "\t\t|\t\t\t|_______________________________|_________________________|" << endl;
    cout << "\t\t|\t\t\t|\t\t2\t\t|\t  150.00\t  |" << endl;
    cout << "\t\t|_______________________|_______________________________|_________________________|" << endl;
}

double calcFee()
{
    double total_fee = 0, member;
    char category;
    int type;
    cout << endl << "Enter your category (S/T): ";
    cin >> category;
    cout << "Enter your type (1/2): ";
    cin >> type;
    cout << "Enter number of participants: ";
    cin >> member;
    if(category == 'S' || category == 's')
    {
        switch(type)
        {
            case 1:
                {
                    total_fee = 50.00 * member;
                }
                break;
            case 2:
                {
                    total_fee = 75.00 * member;
                }
                break;
        }
    }
    else if(category == 'T' || category == 't')
    {
        switch(type)
        {
            case 1:
                {
                    total_fee = 100.00 * member;
                }
                break;
            case 2:
                {
                    total_fee = 150.00 * member;
                }
                break;
        }
    }
    return total_fee;
}

Спасибо тем, кто помог мне.Я обязательно позабочусь о ваших советах и ​​уроках

1 Ответ

0 голосов
/ 30 мая 2018

Необходимо присвоить возвращаемое значение calcFee() локальной переменной main() total_fee:

total_fee = calcFee(category, type, member) ;

Кроме локальных переменных main() category, type и member не используются в main() и не изменяются с помощью calcFee(), который изменяет только копию этих унифицированных переменных.Исходный вопрос гласит, что входные данные предоставляются через параметры, поэтому вы не должны принимать входные данные внутри функции.Вместо этого category, type и member должны быть присвоены значения из ввода перед вызовом calcFee().Этот вопрос вовсе не требует, чтобы вы принимали пользовательский ввод, и гарантирует, что ввод действителен (например, тестирование в нижнем регистре не требуется), поэтому следующее решение является подходящим:

double calcFee( char category, int type, int member )
{
    double total_fee = 0 ;
    if( category == 'S' )
    {
        switch(type)
        {
            case 1:
            {
                total_fee = 50.00 * member;
            }
            break;
            case 2:
            {
                total_fee = 75.00 * member;
            }
            break;
        }
    }
    else if(category == 'T')
    {
        switch(type)
        {
            case 1:
            {
                total_fee = 100.00 * member;
            }
            break;
            case 2:
            {
                total_fee = 150.00 * member;
            }
            break;
        }
    }
    return total_fee;
}

Функция может быть значительно упрощена:

// Pre-conditions: category = `S` or `T`
//                 type = 1 or 2
//                 member > 0
double calcFee( char category, int type, int member )
{
    double total_fee = member * 100 ;  // Primary student fee

    // Secondary staff/students pay 50% more
    if( type == 2 )
    {
        total_fee *= 1.5 ;
    }

    // Students pay half secondary/primary fee
    if( category == 'S' )
    {
        total_fee /= 2.0 ;
    }

    return total_fee ;
}

Обратите внимание на использование комментариев для объяснения цели кода.Я ожидаю, что ваш репетитор сбросит оценки за некомментированный код.

Предварительные условия указывают на вещи, которые вы считаете истинными при вызове функции, поэтому не нужно проверять - проверка является обязанностью вызывающего кода - в противном случае в реальном приложении вы будете неоднократно проверять одни и те же данныеснова и снова, а не только в одном месте.

Обратите внимание также на тип member - нет смысла иметь нецелое число членов.

...