使用数据结构和数组查找总和的问题

Problems finding out total sum using data structures and arrays

本文关键字:和的 问题 查找 数组 数据结构      更新时间:2023-10-16

我有这个代码,有几个功能,我几乎完成了,我只是很难找到我的程序的租金成本。我的程序读取汽车和租赁成本的文本文件,如下所示:

2014 Toyota Tacoma 115.12 1
2012 Honda CRV 85.10 0
2015 Ford Fusion 90.89 0
2013 GMC Yukon 110.43 0
2009 Dodge Neon 45.25 1
2011 Toyota Rav4 65.02 1
2012 Mazda CX5 86.75 1
2016 Subaru Outback 71.27 0
2015 Ford F150 200.83 1
2010 Toyota Corolla 50.36 1

float字符是价格(租赁成本)

但是,我希望用户输入车号(1-10)选择多少天并输出租赁成本。我只是有麻烦,它将如何读取输入的汽车用户想要的。这是我的主代码,但我需要的是告诉情况3是否需要工作。

#include <iostream>
#include <fstream>
using namespace std;
struct car {
    int year;
    char make[10];
    char model[10];
    float price;
    int available;
} ;
void menu();
// Main Function
int main ()
{
// declare variables
int carAmount = 10;
int choice;
car carLib[carAmount];
char filename[10];
ifstream carInData;
float mostExpensive = 0;
int MostExpensiveIndex;
int count = 0;
int days;
int rentalCost = 0;
bool menu1 = false;
    //prompt user for input file
    cout << " Enter file name: ";
    cin >> filename;
    // Start loop menu
    while(menu1 = true){
    menu();
    carInData.open(filename);
    cin >> choice;
    if (carInData.is_open()) {
    // read list of names into array

       for (; count < carAmount; count++) {
        carInData >> carLib[count].year >> carLib[count].make >> carLib[count].model >> carLib[count].price >> carLib[count].available;
        }
    }
    switch (choice) {
   // Case 1 closes menu
    case 1:
    return 0;
    break;
    // Case 2 displays if car is available if 1, unavailable if 0
    case 2:
    // itterate through car array
    for(count = 0; count < carAmount; count++){
    // Displays if car is available or not 
    if (carLib[count].available == 1)
        cout << " Available ";
    else
        cout << " Unavailable ";
    // Display Cars
    cout << carLib[count].year << " " << carLib[count].make << " " << carLib[count].model << " " << carLib[count].price << "  " << "n";
    }
    break;
    // Display only available cars
    case 3:
    // itterate through car array
    for(count = 0; count < carAmount; count++){
    // Displays only available cars
    if (carLib[count].available == 1){
        cout << " Available ";
    // Display Cars
    cout << carLib[count].year << " " << carLib[count].make << " " << carLib[count].model << " " << carLib[count].price << "  " << "n";
      }
    }
    break;

    // Calculates  rental cost
    case 4:
    cout << " Enter car number and how many days " << "n";
    cout << " Days: ";
    cin >> days;
    cout << "n" << "Car: ";
    cin >> carLib[count].price;
    rentalCost += days*count;
    cout << " Rental Cost for " << days << " days is " << rentalCost << "n";
    break;
    // Finds most expensive car
    case 5:
    MostExpensiveIndex = count;
    for (size_t carIndex = 0; carIndex < carAmount; ++carIndex) {
        if (carLib[carIndex].price <= mostExpensive) continue;
        mostExpensive = carLib[carIndex].price;
        MostExpensiveIndex = carIndex;
    }
    const car & carI = carLib[MostExpensiveIndex];
    cout << " Most Expensive car is: " << " " << carI.year << " " << carI.make << " " <<  carI.model << " "  << carI.price << "n";
    break;

      }
    }
    return 0;
}

void menu()
{
    cout << " 1 - Exit program.n";
    cout << " 2 - Show Carsn"; 
    cout << " 3 - Show only available cars.n";
    cout << " 4 - Rental Costn";
    cout << " 5 - Most Expensive Carn";
}  

除非我误解了你的代码应该如何工作,我认为情况3工作得很好。然而,你应该担心的是情况4

      case 4:
            cout << " Enter car number and how many days " << "n";
            cout << " Days: ";
            cin >> days;
            cout << "n" << "Car: ";
            cin >> carLib[count].price;  // WHY IS THE USER CHANGING THE PRICE?
            rentalCost += days*count;    // WHY IS THE PRICE "DAYS * (CAR ID #)"
            cout << " Rental Cost for " << days << " days is " << rentalCost << "n";
            break;

你可以在那里看到我的评论。我要把它改成

      case 4:
            cout << " Enter car number and how many days " << "n";
            cout << " Days: ";
            cin >> days;
            cout << "n" << "Car: ";
            cin >> count ;
            // Note the decrement of 'count' by one, since you expect the user
            // to enter a number 1-10
            // Should probably include a check that the 'count' is valid
            rentalCost += days*carLib[count-1].price;
            cout << " Rental Cost for " << days << " days is " << rentalCost << "n";
            break;

注意,carLib从0到>9递增,但是您的用户可能认为它从1到10递增。当您打印选项2(所有汽车信息)时,包含您期望用户提供的汽车ID号可能会有所帮助。

还有几个问题要问你

  • 您将租金成本存储为int(不确定这是否是设计),因此只需记住days*price计算将被四舍五入。
  • 租金成本是递增越来越大,所以我猜用户是租多辆车?
  • 在增加用户的租车成本之前,你也许应该检查一下用户是否真的可以租到车。