使用 类 和指针从单独的文件中查找最大价格

Find the largest price from a separate file using classes and pointers

这是作业

所以这是一个工作正常的函数。我必须从文件中找到最昂贵的汽车并将其打印到终端。我将 post 我的功能并阐明我在下面的内容。


文件格式如下

赫兹 93619

2014 丰田塔科马 115.12 1

2012 本田 CRV 85.10 0

2015 福特 Fusion 90.89 0

2013 GMC 育空 110.43 0

2009 道奇霓虹灯 45.25 1


阿拉莫 89502

2011 丰田 Rav4 65.02 1

2012 马自达 CX5 120.75 1

2016 斯巴鲁傲虎 71.27 0

2015 福特 F150 112.83 1

2010款丰田花冠 50.36 1


预算 93035

2008 福特嘉年华 42.48 0

2009 道奇 Charger 55.36 1

2012 款雪佛兰伏特 89.03 0

2007 斯巴鲁力狮 59.19 0

2010 日产千里马 51.68 1


void mostExpense(Agency *agencyptr)
{
float largest = 0.0f;
int agencyPosition = 0;
int carPosition = 0;

Car *carptr = agencyptr -> inventory;

for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 5; j++)
    {
        if ((carptr -> getPrice()) > largest)
        {
            largest = carptr -> getPrice();
            agencyPosition = i + 1;
            carPosition = j + 1;
        }
        carptr++;
    }
    agencyptr++;
    carptr = agencyptr -> inventory;
}

switch (agencyPosition)
{
    case 1:
        agencyptr--; agencyptr--; agencyptr--;
        carptr = agencyptr -> inventory;
        switch (carPosition)
        {
            case 1:
                carptr -> print();
                break;
            case 2:
                carptr++;
                carptr -> print();
                break;
            case 3:
                carptr++; carptr++;
                carptr -> print();
                break;
            case 4:
                carptr++; carptr++; carptr++;
                carptr -> print();
                break;
            case 5:
                carptr++; carptr++; carptr++; carptr++;
                carptr -> print();
                break;
        }
        break;
    case 2:
        agencyptr--; agencyptr--;
        carptr = agencyptr -> inventory;
        switch (carPosition)
        {
            case 1:
                carptr -> print();
                break;
            case 2:
                carptr++;
                carptr -> print();
                break;
            case 3:
                carptr++; carptr++;
                carptr -> print();
                break;
            case 4:
                carptr++; carptr++; carptr++;
                carptr -> print();
                break;
            case 5:
                carptr++; carptr++; carptr++; carptr++;
                carptr -> print();
                break;
        }
        break;
    case 3:
        agencyptr--;
        carptr = agencyptr -> inventory;
        switch (carPosition)
        {
            case 1:
                carptr -> print();
                break;
            case 2:
                carptr++;
                carptr -> print();
                break;
            case 3:
                carptr++; carptr++;
                carptr -> print();
                break;
            case 4:
                carptr++; carptr++; carptr++;
                carptr -> print();
                break;
            case 5:
                carptr++; carptr++; carptr++; carptr++;
                carptr -> print();
                break;
        }
        break;
}
}

所以我的项目是,我们有 3 家不同的公司提供汽车租赁服务。每个公司有5辆汽车。我现在拥有的东西可以工作,但它是多余的,并且有将近 200 行代码。我遇到的主要问题是我的 switch 语句。我有 3 个不同的案例(每个都有 3 个租车地点),我首先从最后一个租车地点开始。然后我检查每一辆车并找到价格。我这样做了 3 次迭代,我的 if 函数测试汽车价格相互比较,然后最终打印出最昂贵的汽车。我想要做的是使用 switch 语句更改我的过程。我该怎么做才能让这个函数更短,但仍然给出相同的输出。我已经尝试了很多东西,但这是唯一一个真正有效的东西,我想要更短的东西,所以当我将来做类似的项目时,我没有将近 1000 行代码一个文件来做一些应该相当简单的事情。

如有任何帮助,我们将不胜感激!

此外,如果需要任何说明,请在评论中告诉我。

价格在品牌和型号之后

0和1是true/false(有没有车)

看来您可以将 agencyPosition 开关案例减少到一个减法。首先确保 agencyPosition 为 1 或 2 或 3。然后从 agencyPtr 中减去 4 - agencyPosition。

注意:4-1 = 3、4-2 = 2、4-3 = 1。

if (agencyPosition >= 1 and agencyPosition <= 3) {
    agencyPtr -= 4 - agencyPosition;
    carptr = agencyptr -> inventory;
    switch (carPosition)
    // Everything else remains the same.
}