2017-05-19 68 views
0

我不明白我的程序输出。我只是试图通过对象的矢量循环并打印它们的成员函数。该代码是这样的:用于打印对象矢量的意外输出

.cpp文件:

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

/* 
* File: Odometer.cpp 
* Author: Adrian 
* 
* Created on May 18, 2017, 6:29 PM 
*/ 

#include "Odometer.h" 

Odometer::Odometer() { 
    miles = 0; 
    efficiency = 0; 
} 

void::Odometer::resetOdometer() { 
    miles = 0; 
} 

void::Odometer::setEfficiency(double efficiency) { 
    this->efficiency = efficiency; 
} 
void::Odometer::setMiles(int miles) { 
    this->miles = miles; 
} 


void::Odometer::addToOdometer(int milesDriven){ 
    miles=miles+ milesDriven; 
} 
//to self:really unsure what this is 

double::Odometer::gasolineConsumed(){ 
    return miles/efficiency; 
} 

double::Odometer::getEfficiency(){ 
    return efficiency; 
} 

int::Odometer::getMiles(){ 
    return miles; 
}  

Odometer::Odometer(const Odometer& orig) { 
}  

//to self:really unsure what this is 

Odometer::~Odometer() { 
} 

和主文件:

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

/* 
* File: main.cpp 
* Author: Adrian 
* 
* Created on May 18, 2017, 6:28 PM 
*/ 

#include "Odometer.h" 
#include <sstream> 
#include <vector> 
using namespace std;  


template <typename T> 
std::string NumberToString(T Number) { 
    std::ostringstream ss; 
    ss << Number; 
    return ss.str(); 
} 

/* 
* 
*/ 
int main(int argc, char** argv) { 

    int miles; 
    double efficiency; 
    int numberTrips; 
    vector<Odometer> v; 
    cout << "Please enter the amount of trips taken : " << endl; 
    cin >> numberTrips; 
    cout << NumberToString(1) << endl; 

    for (int i = 1; i <= numberTrips; i++) { 
     cout << "Please enter number of miles for trip " << NumberToString(i) << endl; 
     cin >> miles; 
     cout << "Please enter the efficiency for trip " << NumberToString(i) << endl; 
     cin >> efficiency; 
     Odometer obj; 
     obj.setMiles(miles); 
     cout << "miles " << obj.getMiles() ; 

     obj.setEfficiency(efficiency); 
     cout << "efficiency " << obj.getEfficiency(); 
     v.push_back(obj);  
    } 

    //the bug   

    for (std::vector<int>::size_type i = 1; i != v.size()+1; i++) { 

     cout << "Miles driven for trip " << NumberToString(i) << " is " << v[i].getMiles() << endl; 
     cout << "Efficiency for trip " << NumberToString(i) << " is " << v[i].getEfficiency() << endl; 
     cout << "Gasoline consumed for trip " << NumberToString(i) << " is " << v[i].gasolineConsumed() << endl; 

    } 

    return 0; 
} 

我应该进入的里程数超过每加仑然后英里效率消耗的汽油。产量应该是英里效率和汽油消耗的数量。

我的控制台输出:在C++

Please enter the amount of trips taken : 
1 
1 
Please enter number of miles for trip 1 
10 
Please enter the efficiency for trip 1 
1 
miles 10efficiency 1Miles driven for trip 1 is 16439 
Efficiency for trip 1 is 1.51332e-306 
Gasoline consumed for trip 1 is 1.#INF 
+2

您还需要包括您期望的输出结果。此外,我可以看到这是您未包含在问题中的代码的问题。包含可能相关的代码,并尝试制作问题的[mcve]。 – Carcigenicate

+0

好的,我应该转贴吗? – user7338821

+1

@ user7338821只需编辑您当前的帖子并清楚说明预期输出是什么 – Elalfer

回答

0

阵列/矢量索引开始于指数0,而不是1你得到你看,因为你正在访问的向量的边界之外的结果。

你的输出循环应该是

for (std::vector<int>::size_type i = 0; i < v.size(); i++) 

或者使用的,而不是索引的迭代器。

+0

我想从1开始因为我想要从1开始,而不是0开始,这些更改仍然会产生疯狂的值。v。[i] .getGalons有什么问题吗? – user7338821

+0

您的复制构造函数'里程表::里程表(常量里程表&原始)'不会做任何事情,它需要。 – 1201ProgramAlarm

+0

cout <<“miles”<< v [0] .getMiles();打印6029508而不是我输入的值“10” – user7338821