2017-04-08 47 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