打印对象矢量的意外输出
unexpected output for printing a vector of objects
我不明白我的程序的输出。我只是尝试遍历对象的向量并打印它们的成员函数。代码是这样的:
.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;
}
我应该输入英里数,而不是以每加仑英里为单位的效率,然后输入消耗的汽油.输出应该是英里数效率和消耗的汽油。
我的控制台输出:
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
C++ 中的数组/向量索引从索引 0 开始,而不是 1。 您获得看到的结果是因为您在向量边界之外访问。
您的输出回路应该是
for (std::vector<int>::size_type i = 0; i < v.size(); i++)
或者使用迭代器而不是索引。
相关文章:
- 字符串比较中的意外输出
- 来自 decltype 的意外输出类型
- 字符数组到十六进制字符串的转换 - 意外输出
- 使用 boost::regex 从目录中获取带有一些正则表达式的文件名称时出现意外输出
- 使用后序遍历递归的深度优先搜索会产生意外输出
- C++的意外输出
- 贝金纳C++练习解决方案的意外输出
- 无效* 转换获得意外输出
- 以下程序的意外输出
- 意外输出:矢量矢量(功率集)
- 基本 int 数组提供意外输出
- 线程的意外输出
- 减法中的意外输出
- 带有左移操作员C 的意外输出
- C strncpy意外输出
- 意外输出..函数绑定在虚拟表中的发生方式
- 星号的意外输出
- 已编译的 protobuf 文件的意外输出路径
- 打印对象矢量的意外输出
- 递归函数用于计算 n 个数字之和的意外输出