2016-04-22 12 views
0

Ich versuche, ein paar Zeilen aus einer Textdatei in einer Klasse, Item und Vektoren zu speichern. Wenn ich jedoch aus der Datei in das Programm lese, wird nichts gespeichert. HierVersucht, Daten aus Textdatei in Vektor von Objekten zu speichern

ist mein Haupt:

#include <vector> 
#include <fstream> 
#include <iostream> 
#include "Item.h" 

using namespace std; 

void readFile(vector<Item>&); 


int main() 
{ 
    vector<Item> items; 
    readFile(items); 
    int size = items.size(); 

    for (int index = 0; index < size; index++) 
    { 
     cout << items[index].getName() << endl; 
    } 
} 

Dies ist die Funktion in Frage:

void readFile(vector<Item>& vecItems, int lines) 
{ 
    ifstream inventory; 
    inventory.open("inventory.txt"); 
    string itemName; 
    int itemDept, itemPrice, itemQuan, itemShort, itemSurplus; 
    string line; 

    if (inventory.fail()) 
    { 
     cout << "ERROR NO FILE FOUND (inventory.txt)\n"; 
     exit(1); 
    } 

    while (inventory >> itemName >> itemDept >> itemPrice >> itemQuan >> itemShort >> itemSurplus) 
    { 
     Item temp(itemName, itemDept, itemPrice, itemQuan, itemShort, itemSurplus); 
     vecItems.push_back(temp); 
    } 
    inventory.close(); 
} 

Ich habe versucht Aufruf

temp.setName(itemName) 
etc etc 

einzeln, aber es immer noch nicht halten in der Vektor. Nichts gibt in Haupt- und der Debugger sagt size = 0. Jede Hilfe

EDIT geschätzt wird: Dies ist das Dateiformat

vitamins 1 15.99 1105 500 1000 
shampoo 2 6.99 298 300 500 
+2

Wie wird die Datei formatiert? Es könnte sein, dass Sie eine schlechte Leseoperation haben. – NathanOliver

+0

Ich fügte es in das OP, kann nicht glauben, dass ich das vergessen habe – MLGSalad

Antwort

3

Ihr Problem ist, dass Sie eine schlechte Lektüre. item_price wird als int deklariert, aber der Preis in der Datei ist eine Fließkommazahl. Wenn Sie versuchen, in item_price einzulesen, erfassen Sie alles bis zum . und hören dann auf zu lesen. Beim nächsten Lesevorgang für itemQuan erhält es die . und schlägt fehl, da . keine gültige int ist. Da der Lesevorgang fehlschlägt, geben Sie niemals den Körper der while-Schleife ein, was bedeutet, dass Sie niemals Objekte erstellen.

Ändern Sie item_price in eine float, double oder std::string, um dies zu beheben.

+0

Ich habe keine Ahnung, wie ich das verpasst habe. Danke Nate, du bist der Beste – MLGSalad

+0

@MLGSalad Normalerweise sind es die kleinen Dinge. – NathanOliver

Verwandte Themen