2017-04-08 3 views
1

so Jungs zu lesen, die wie dieseDer Versuch, aus einer Textdatei auf ein Objektarray

A 0 3

B 2 6

sieht

C 4 4

D 6 5

E 8 2

die linke Spalte der Name ist, ist der nächste Ankunftszeit und die letzte ist die Dauer das ist, was ich habe jetzt

#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; 

jetzt, wenn ich in gehen und aus den Werten in meinen verschiedenen Objekte drucken (wie am Ende des Codes) nachdem ich die Datei geschlossen habe, enthalten sie alle Informationen aus der ersten Zeile der Datei. Ich weiß nicht warum, weil ich technisch 'i' erhöhe, nachdem ich alle Werte des Jobs gesetzt habe und dann fileinfo die nächste Zeile der Datei bekommt, so scheint mir das zu funktionieren. Aber wie die Werte bekomme ich aus diesen 3 couts am Boden die Ergebnisse

A

A

die Jobklasse sind

Job::Job(){} 

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

und es hat auch alle seine bekommen und setzt definiert so können Sie mir bitte helfen, in der Lage sein, aus der Datei richtig einzulesen und meine obje erstellen ct Array

+0

Jetzt, da der Teil mit dem "i" in der Schleife fixiert ist, sind alle meine int-Werte jetzt in den ASCII-Gegenstücken. Wie konvertiert man die Werte in dezimale Ganzzahlen? – Yaboy93

+0

OK Jungs Ich reparierte dieses Problem auch nur durch Subtrahieren 48 von jedem Wert – Yaboy93

Antwort

0
int i = 0; 

Jedes Mal durch die Schleife, wird i auf Null initialisiert. Unmittelbar nach i-0 Initialisierung Code tut dies:

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

i wird immer Null sein, hier. Das siehst du. Ihr Computer wird immer genau das tun, was Sie ihm sagen, anstatt, was Sie wollen. Dies ist eine gute Faustregel, die Sie beachten sollten, wenn Sie vorwärts gehen.

i++; 

Dies spielt keine Rolle, denn bei der nächsten Iteration der while Schleife wird i wieder auf 0 initialisiert werden. Siehe oben.

while(!afile.eof()) 

Und this is going to be your second bug, auch, die Sie sofort nach dem Fixieren erste Fehler entdecken (initialisieren i vor der Schleife, in ihn nicht).

+0

Vielen Dank, dass Teil – Yaboy93

+0

behoben Ich bekomme jetzt die richtigen Werte für jedes Objekt, aber die Dezimalwerte, die ich will, sind alle in ASCII-Form, also wie konvertiere ich Sie? – Yaboy93

+0

@ Yaboy93 Es gibt viele verschiedene Möglichkeiten. [Geben Sie »std :: stoi« einen Blick] (http://en.cppreference.com/w/cpp/string/basic_string/stol), um zu sehen, ob es Ihren Bedürfnissen entspricht. – user4581301

Verwandte Themen