【问题标题】:Void function to print two different answers using same variable无效函数使用相同的变量打印两个不同的答案
【发布时间】:2019-04-09 21:10:09
【问题描述】:

我上周的作业是

编写一个程序,读取 2 辆汽车消耗的汽油升数和行驶里程数,然后输出每辆车消耗的每加仑燃料的里程数,并比较两者的燃油效率。

我完成了。本周项目是对之前项目的修改和

添加两个void函数:

一个叫做 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) 的结果在各自正确的位置打印出来的地方。

使用的汽车1:55升燃料 1号车行驶:123英里 汽车 1 获得:每加仑 22.7119 英里 使用的汽车 2:55 升燃油 2号车行驶:123英里 汽车 2 获得:每加仑 8.46533 英里 1号车的燃油效率更高。

【问题讨论】:

  • 欢迎来到 Stack Overflow。请在minimal complete examples 上查看我们的页面。如果你简化你的代码(即让它做的更少)错误会很明显,你可能根本不需要我们的帮助。
  • 错误值从何而来?从哪个变量?正确的值应该如何进入该变量?或者如果它确实进入了它,你的代码是否有可能在某个时候覆盖它?你的输出函数只得到一个升值和一个英里值;然而,它确实获得了 mpg 的两个值。它打印升两次,你如何期望它产生两个不同的值?
  • @Yunnosch 感谢您的意见和指导。我将liters1, liters2, miles1, miles2 添加到我的函数中,现在它可以工作了。

标签: c++ function void


【解决方案1】:

汽车 1 和汽车 2 有各自的 litersmiles 值集,但您只保存用户输入的最后一组值,然后将最后一组值传递给 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;
    }
}

话虽如此,考虑使用structclass 来帮助您更好地组织每辆汽车的价值和功能,例如:

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;
    }
}

【讨论】:

  • 谢谢。这基本上是我修复它的方法并且它有效,但我不确定为什么,所以谢谢你的解释。另外,感谢您的struct 建议。这还不是我们讨论过的内容,但这样看起来更简洁,所以我会提前阅读它。
猜你喜欢
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 2020-01-30
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多