2017-05-19 70 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