2017-04-08 42 views
1

所以球员我必须从一个文本文件,它看起来像这样试图从文本文件中读取到一个对象数组

A 0 3

B 2 6

创建从信息5个作业对象

-C 4 4

d 6 5

E 8 2

的左栏是它的名字,接下来就是到达时间,最后一个是时间 这是我现在所拥有的

#include <iostream> 
#include <fstream> 
#include "Job.hpp" 
using namespace std; 

int main(int argc, const char * argv[]) { 

    string fileinfo; 
    string programname; 


//gets Jobs.txt from commandline 
programname.append(argv[1]); 



Job jobs[5]; 
fstream afile; 


//reads in from the file to create job objects 
afile.open(programname); 

if(afile.fail()){ 
    cout <<"file could not be opened " << programname <<endl; 
} 
while(!afile.eof()) 
{ 


    getline(afile,fileinfo); 
    int i = 0; 

     //cout <<fileinfo[0] <<endl;//gets next letter 
     //cout <<fileinfo[2] <<endl;//gets next arrival time 
     //cout << fileinfo[4] <<endl;//gets next duration time 
    jobs[i].setletter(fileinfo[0]); 
    jobs[i].setarrivaltime(fileinfo[2]); 
    jobs[i].setduration(fileinfo[4]); 
    i++; 


} 

afile.close(); 

cout << jobs[1].getletter() <<endl; 
cout << jobs[2].getletter() <<endl; 
cout << jobs[3].getduration() <<endl; 

现在当我去和我的不同对象打印出来的值(就像在代码的底部一样)在我关闭文件后,它们都包含了文件第一行的信息。 我不知道为什么,因为技术上我增加'我'后,我设置所有的工作值,然后fileinfo获取该文件的下一行,所以这对我来说似乎应该工作。 但像i的值从那些3个COUTS获得底部的结果是

一个

一个

Job类

Job::Job(){} 

Job::Job(char let, int arrive, int dura){ 
    letter = let; 
    arrivaltime = arrive; 
    duration = dura; 
} 

,它也有所有的获取和设置定义 所以你们可以帮助我能够从文件正确读入并创建我的目标ct array

+0

现在循环内部带有“i”的部分是固定的,我所有的int值现在都在ASCII对应部分中,那么如何将值转换为十进制整数? – Yaboy93

+0

好吧,我也解决了这个问题,只需从每个值中减去48就可以了 – Yaboy93

回答

0
int i = 0; 

每次通过循环,i被初始化为零。初始化i为0后,立即您的代码做这个:

jobs[i].setletter(fileinfo[0]); 
jobs[i].setarrivaltime(fileinfo[2]); 
jobs[i].setduration(fileinfo[4]); 

i将始终为零,在这里。这就是你所看到的。您的计算机将始终按照您要求的方式执行,而不是您希望执行的操作。这是一个很好的经验法则,您可以随时记住。

i++; 

这不要紧,因为在while循环的下一次迭代,i将再次被初始化为0。往上看。

while(!afile.eof()) 

而且,this is going to be your second bug,也是,你会马上发现修理你的第一个错误(循环之前初始化i,而不是在它里面)之后。

+0

谢谢修复那部分 – Yaboy93

+0

现在我正在为每个对象获取正确的值,但是我想要的十进制值都是ASCII格式,所以我如何转换他们? – Yaboy93

+0

@ Yaboy93有很多不同的方法。 [给'std :: stoi'一看](http://en.cppreference.com/w/cpp/string/basic_string/stol)来查看它是否符合你的需求。 – user4581301