2017-05-19 17 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から始めたいと思っていました。 0の代わりに1から始まる旅行に名前を付けるために、変化は依然として狂った値を生みます。v。[i] .getGalonsに何か間違いがありますか? – user7338821

+0

あなたのコピーコンストラクタ 'Odometer :: Odometer(const Odometer&orig)'は何もしないので、それが必要です。 – 1201ProgramAlarm

+0

cout << "miles" << v [0] .getMiles(); '10"の値を入力したのではなく、6029508を出力します。 – user7338821