Функция Void для печати двух разных ответов с использованием одной и той же переменной - PullRequest
0 голосов
/ 10 апреля 2019

Моя домашняя работа на прошлой неделе была

Напишите программу, в которой будет указано количество литров бензина, потребленных и пройденных миль на 2 автомобилях, затем выведено количество миль на галлон топлива, потребленного каждым транспортным средством, и сравните их для эффективности использования топлива.

Который я закончил. На этой неделе проект должен изменить предыдущий проект и

Добавить две пустые функции:

одна вызванная userInstruction, которая говорит пользователю, что делать

Другой displayResult, который отображает исходную информацию (количество литров и пройденных миль) и результат (миль на галлон).

Кажется, мне удалось заставить его работать в основном. Он компилируется и работает по крайней мере. Тем не менее, автомобиль 1, кажется, показывает количество использованного топлива и количество миль, пройденных от автомобиля 2, несмотря на то, что он получает правильные мили на галлон. Я не уверен, что я делаю неправильно. Может быть, я совершенно не в том, что она хочет, поэтому я не могу понять это?

Кроме того, в качестве дополнительного вопроса, есть ли способ заставить "Сделать то же самое с автомобилем 2" в функции userInstruction void?

const double LPG = 0.264179;

double mpg(double miles, double liters);
void userInstruction();
void displayResult(double mpg1, double mpg2, double liters, double miles);

int main()
{
    char keepGoing;
    double liters, miles, mpg1, mpg2;
    do
    {
        userInstruction();
        cin >> liters;
        cin >> miles;
        //calling function
        mpg1 = mpg(miles, liters);

        cout << endl << endl << "Do the same for Car 2. \n" << endl;
        cin >> liters;
        cin >> miles;

        mpg2 = mpg(miles, liters);

        displayResult(mpg1, mpg2, liters, miles);

        if (mpg1 == mpg2)
        {
            cout << "Both cars have the same fuel efficiency. \n" << endl;
        }
        else if (mpg1 > mpg2)
        {
            cout << "Car 1 has better fuel efficiency. \n" << endl;
        }
        else
        {
            cout << "Car 2 has better fuel efficency. \n" << endl;
        }
        //Allows for repeating
        cout << "Do you wish to keep going? (y/n)  \n";
        cin >> keepGoing;
    }

    while (keepGoing == 'y' || keepGoing == 'Y');

    system("pause");
    return 0;
}

double mpg(double miles, double liters)
{
    double milesPerGallon;
    milesPerGallon = miles / (liters * LPG);
    return milesPerGallon;
}

void userInstruction()
{
    cout << "Please enter the liters of gasoline consumed as well as the miles travelled. \n" << endl;
}

void displayResult(double mpg1, double mpg2, double liters, double miles)
{
    cout << "Car 1 used: " << liters << " liters of fuel \n";
    cout << "Car 1 drove: " << miles << " miles \n";
    cout << "Car 1 gets: " << mpg1 << " miles per gallon \n" << endl;

    cout << "Car 2 used: " << liters << " liters of fuel \n";
    cout << "Car 2 drove: " << miles << " miles \n";
    cout << "Car 2 gets: " << mpg2 << " miles per gallon \n" << endl;
}

Здесь я ожидал, что результаты входов (5 30) и (55 123) будут распечатаны в соответствующих точках.

Car 1 used: 55 liters of fuel
Car 1 drove: 123 miles
Car 1 gets: 22.7119 miles per gallon

Car 2 used: 55 liters of fuel
Car 2 drove: 123 miles
Car 2 gets: 8.46533 miles per gallon

Car 1 has better fuel efficiency.

1 Ответ

0 голосов
/ 10 апреля 2019

Автомобиль 1 и Автомобиль 2 имеют свой собственный индивидуальный набор значений для liters и miles, но вы сохраняете только последний набор, введенный пользователем, и затем передаете этот последний набор на displayResult(), так что вы в итоге отображаются одинаковые значения для обоих автомобилей. Вам нужно пройти оба набора по отдельности, как вы уже это делаете для обоих рассчитанных MPG, например:

double mpg(double miles, double liters);
void userInstruction();
void displayResult(double miles1, double liters1, double mpg1,
                   double miles2, double liters2, double mpg2);

int main()
{
    double miles1, liters1, mpg1;
    double miles2, liters2, mpg2;
    char keepGoing;

    do
    {
        userInstruction();
        cin >> liters1;
        cin >> miles1;
        //calling function
        mpg1 = mpg(miles1, liters1);

        cout << endl << endl << "Do the same for Car 2. \n" << endl;
        cin >> liters2;
        cin >> miles2;

        mpg2 = mpg(miles2, liters2);

        displayResult(miles1, liters1, mpg1, miles2, liters2, mpg2);

        //Allows for repeating
        cout << "Do you wish to keep going? (y/n)  \n";
        cin >> keepGoing;
    }
    while (keepGoing == 'y' || keepGoing == 'Y');

    system("pause");
    return 0;
}

static const double LPG = 0.264179;
double mpg(double miles, double liters)
{
    return miles / (liters * LPG);
}

void userInstruction()
{
    cout << "Please enter the liters of gasoline consumed as well as the miles travelled for Car 1. \n" << endl;
}

void displayResult(double miles1, double liters1, double mpg1,
                   double miles2, double liters2, double mpg2)
{
    cout << "Car 1 used: " << liters1 << " liters of fuel \n";
    cout << "Car 1 drove: " << miles1 << " miles \n";
    cout << "Car 1 gets: " << mpg1 << " miles per gallon \n" << endl;

    cout << "Car 2 used: " << liters2 << " liters of fuel \n";
    cout << "Car 2 drove: " << miles2 << " miles \n";
    cout << "Car 2 gets: " << mpg2 << " miles per gallon \n" << endl;

    if (mpg1 == mpg2)
    {
        cout << "Both cars have the same fuel efficiency. \n" << endl;
    }
    else if (mpg1 > mpg2)
    {
        cout << "Car 1 has better fuel efficiency. \n" << endl;
    }
    else
    {
        cout << "Car 2 has better fuel efficency. \n" << endl;
    }
}

При этом рассмотрите возможность использования struct или class, чтобы помочь вам лучше организовать значения и функциональность каждого автомобиля, например:

struct travelInfo
{
    double miles, liters;

    double mpg() const;
    void getUserInput(const string &prompt);
    void displayResult(const string &name) const;
};

void userInstruction(travelInfo &car1, travelInfo &car2);
void displayResult(const travelInfo &car1, const travelInfo &car2);

int main()
{
    travelInfo car1, car2;
    char keepGoing;

    do
    {
        userInstruction(car1, car2);
        displayResult(car1, car2);

        //Allows for repeating
        cout << "Do you wish to keep going? (y/n)  \n";
        cin >> keepGoing;
    }
    while (keepGoing == 'y' || keepGoing == 'Y');

    system("pause");
    return 0;
}

static const double LPG = 0.264179;
double travelInfo::mpg() const
{
    return miles / (liters * LPG);
}

void travelInfo::getUserInput(const string &prompt)
{
    cout << prompt << " \n" << endl;
    cin >> liters;
    cin >> miles;
}

void travelInfo::displayResult(const string &name) const
{
    cout << name << " used: " << liters << " liters of fuel \n";
    cout << name << " drove: " << miles << " miles \n";
    cout << name << " gets: " << mpg() << " miles per gallon \n";
}

void userInstruction(travelInfo &car1, travelInfo &car2)
{
    car1.getUserInput("Please enter the liters of gasoline consumed as well as the miles travelled for Car 1.");
    cout << endl << endl;
    car2.getUserInput("Do the same for Car 2.");
}

void displayResult(const travelInfo &car1, const travelInfo &car2)
{
    double mpg1 = car1.mpg(), mpg2 = car2.mpg();

    car1.displayResult("Car 1");
    cout << endl;

    car2.displayResult("Car 2");
    cout << endl;

    if (mpg1 == mpg2)
    {
        cout << "Both cars have the same fuel efficiency. \n" << endl;
    }
    else if (mpg1 > mpg2)
    {
        cout << "Car 1 has better fuel efficiency. \n" << endl;
    }
    else
    {
        cout << "Car 2 has better fuel efficency. \n" << endl;
    }
}
...