C++ Void函数使用同一变量打印两个不同的答案

C++ Void函数使用同一变量打印两个不同的答案,c++,function,void,C++,Function,Void,我上周的作业是 编写一个程序,读取2辆车消耗的汽油升数和行驶里程数,然后输出每辆车每加仑燃油消耗的里程数,并比较这两种车的燃油效率 我完成了。本周项目将修改以前的项目和 添加两个void函数: 一个叫做userInstruction的命令告诉用户该做什么 另一个displayResult显示原始信息(行驶的升数和英里数)和结果(每加仑英里数) 看来我已经设法使它大部分工作。它至少可以编译和运行。然而,1号车似乎显示了2号车使用的燃油升数和行驶英里数,尽管它的每加仑英里数是正确的。我不确定我做错了

我上周的作业是

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

我完成了。本周项目将修改以前的项目和

添加两个void函数:

一个叫做userInstruction的命令告诉用户该做什么

另一个displayResult显示原始信息(行驶的升数和英里数)和结果(每加仑英里数)

看来我已经设法使它大部分工作。它至少可以编译和运行。然而,1号车似乎显示了2号车使用的燃油升数和行驶英里数,尽管它的每加仑英里数是正确的。我不确定我做错了什么。也许我完全偏离了她想要的,这就是为什么我不明白

另外,作为一个附带问题,是否有任何方法将“对car 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;
}
const double LPG=0.264179;
双加仑(双英里,双升);
void userInstruction();
无效显示结果(双mpg1、双mpg2、双升、双英里);
int main()
{
炭保持;
双升,英里,mpg1,mpg2;
做
{
用户指令();
cin>>升;
cin>>英里;
//调用函数
mpg1=每加仑(英里,升);
库特英里;
mpg2=每加仑(英里,升);
显示结果(mpg1、mpg2、升、英里);
如果(mpg1==mpg2)
{

车辆1和车辆2对于
英里
有各自的值集,但您只保存用户输入的最后一组值,然后将最后一组值传递到
显示结果()
,因此两辆车的显示值都相同。您需要分别通过这两个设置,就像您已经通过两个计算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;
    }
}

欢迎使用Stack Overflow。请查看我们的页面。如果您简化了代码(即让它做得更少)错误是显而易见的,您可能根本不需要我们的帮助。错误的值来自哪里?来自哪个变量?正确的值应该如何进入该变量?或者如果它确实进入该变量,您的代码是否可能在某个点覆盖它?您的输出函数只获得一个升值和一个英里值;它确实存在不过,mpg有两个值。它打印两次升,你认为这会产生两个不同的值吗?@Yunnosch感谢你的输入和指导。我在我的函数中添加了
liters1,liters2,miles1,miles2
,现在它可以工作了。谢谢。这基本上就是我修复它的方式,它可以工作,但我不确定确切的原因,谢谢谢谢你的解释。另外,谢谢你的
struct
建议。这不是我们已经讨论过的内容,但是这样看起来更干净了,所以我会在前面做一些阅读。
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 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;
    }
}