运行失败,没有任何异常

Run fails without any exception

本文关键字:任何 异常 失败 运行      更新时间:2023-10-16

请看下面的代码

#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
int static carNumber = 1; //Counts the car number
static int vectorLocation = 0; // used to get the vector location
double total=0; // total amount of charges
vector<double>hoursVector; //tracks each car's parkes hour
vector<double>chargeVector; //tracks each charge
vector<int>carVector; //tracks each car number

double calculateCharge(double numberOfHours);
void printData();
void insertIntoVector(double hours, double charges);
int main()
{
    cout << "Start entering data. -1 to exit nn " << endl;
    double numberOfHours=0;
    while(true)
    {
        cout << "Enter Number Of Hours"<< endl;
        cin >> numberOfHours;
        if(numberOfHours==-1)
        {
            break;
        }
        else
        {
            total = total + calculateCharge(numberOfHours);
        }
    }
    printData();
}

//This code will calculate the charge values
double calculateCharge(double numberOfHours)
{
    double charge = 0;
    double extraHours = 0;
    double extraCharge = 0;

    if(numberOfHours<=3)
    {
        charge = 2;
        insertIntoVector( numberOfHours, charge);
    }
    else if(numberOfHours>3 && numberOfHours<24)
    {
        extraHours = numberOfHours-3;
        extraCharge = extraHours * 0.5;
        charge = 2+extraCharge;
        insertIntoVector( numberOfHours, charge);
    }
    else if(numberOfHours==24)
    {
        charge = 10;
        insertIntoVector( numberOfHours, charge);
    }
    else if(numberOfHours>24)
    {
        charge = 0;
        insertIntoVector( numberOfHours, charge);
    }
    return charge;

}

//This code is used to enter data into vectors
void insertIntoVector(double hours, double charges)
{
    hoursVector[vectorLocation] = hours;
    chargeVector[vectorLocation] = charges;
    carVector[vectorLocation] = carNumber++;
    vectorLocation++;
    carNumber++;
}

//This method is used to print data
void printData()
{
    cout << "Car"<< setw(6)<< "Hours" << setw(6) << "Charge" << endl;
    for(size_t i=0;i<hoursVector.size();i++)
    {
        cout << carVector[i] << setprecision(2) << fixed << setw(6) << hoursVector[i] << setw(6) << chargeVector[i] << endl;
    }
}

在这里,在 while 循环中给出 1 个数据后,程序终止给出错误

运行失败(退出值 1,总时间:5 秒)

我不明白为什么。我是C++新手,自己学习。请帮助我更正此代码并毫无问题地运行它。

问题是

hoursVector[vectorLocation] = hours;
chargeVector[vectorLocation] = charges;
carVector[vectorLocation] = carNumber++;

这些元素尚不存在。您必须使用push_back来动态增加矢量的大小。

hoursVector[vectorLocation] = hours;
chargeVector[vectorLocation] = charges;
carVector[vectorLocation] = carNumber++;
vectorLocation++;

这是插入矢量的无效方式。你应该做这样的事情:

hoursVector.push_back( hours );
chargeVector.push_back( charges );
carVector.push_back( carNumber++ );

std::vector 本身包含有关他分配的内存块的信息;块的大小;当前存储的数据大小等等。在需要时,它会扩展内存块以允许您推送新值。因此,当您使用索引时,您只是耗尽了分配的内存块(在这种情况下)。无论如何,将值添加到向量中都不是有效的方法,因此必须替换为匹配方法。请参阅链接以获取有关 std::vector 方法的帮助。