2016-04-09 14 views
1

Dies ist ein einfacher Code zum Registrieren von Spielen in einer Datei, aber es gibt zwei Probleme.Fstream speichert nicht das letzte Wort in der Datei und es liest auch nicht aus der Datei

Zuerst wird der Parameter oder das Attribut "Klassifikation" nicht in der Datei gespeichert.

Und zweitens, wenn ich von der Datei lesen, wird der Inhalt nicht angezeigt.

Bevor Sie kommentieren, müssen Sie wissen, dass dies das erste Mal ist, dass ich mit Dateien arbeite und ich versuche, es selbst zu lernen.

Und ich weiß, dass dieser Code fehlt der Modularität und ich sollte einen Vektor von Zeigern von Objekten, nicht zu Objekten, oder ich sollte Smart-Zeiger, aber ich wollte Ihnen nur das Problem, das ich mit der Datei haben.

Jede Hilfe ist wirklich

geschätzt
#include <iostream> 
#include <vector> 
#include <fstream> 
#include <string> 

using std::string; 
using std::cout; 
using std::vector; 
using std::cin; 
using std::endl; 
using std::getline; 
using std::fstream; 

struct Games 
{ 
string name; 
string gender; 
string clasification; 
int year; 
}; 

struct VectorGames 
{ 
vector<Games>VectorForGames; 
void InsertGame(string n, string g, string c, int y) 
{ 
    Games New = Games(); 
    New.name = n; 
    New.gender = g; 
    New.clasification = c; 
    New.year = y; 
    VectorForGames.push_back(New); 
} 
}; 

int main() 
{ 
string name; 
string gender; 
string clasification; 
int year = 0; 
int option = 0; 
VectorGames V; 
fstream File("SavedGames.txt", fstream::in | fstream::out | fstream::app |  fstream::ate); 
do 
{ 
    cout << "1. Register a game " << endl 
     << "2. Show the list of games registered" << endl 
     << "3. Exit " << endl; 
    cout << "Type in your option: "; 
    cin >> option; 
    cin.get(); 

    switch (option) 
    { 
    case 1: 
    { 
     cout << "Type in the name: "; 
     getline(cin, name); 
     cout << "Type in the gender: "; 
     getline(cin, gender); 
     cout << "Type in the clasification: "; 
     getline(cin, gender); 
     cout << "Type in the year: "; 
     cin >> year; 
     V.InsertGame(name, gender, clasification, year); 
     if (File.is_open()) 
      File << "Name: " << name << " Gender: " << gender 
      << " Clasification: " << clasification << " Year: " << year << endl; 
     break; 
    } 

    case 2: 
    { 
     string temporal; 
     while (getline(File, temporal)) 
     { 
      cout << temporal << endl; 
     } 
     break; 
    } 

    case 3: File.close(); 
     break; 

    default: cout << "Try again" << endl; 

    } 

} while (option != 3); 

return 0; 

}

+0

Könnten Sie sich das bitte ansehen? http://stackoverflow.com/help/mcve Ich würde auch empfehlen, zu lernen, wie Dateiströme arbeiten, bevor sie in eine Anwendung integriert werden. Versuchen Sie, ein Programm zu schreiben, das nur eine einzelne Zahl aus einer Datei liest und sie an den Benutzer ausgibt. Es gibt eine Menge Sachen, die repariert werden müssen, aber Sie sollten wahrscheinlich über verschiedene Elemente lernen, bevor Sie tatsächlich weitere Funktionen hinzufügen. –

+0

Danke für das Kommentieren in meinem Beitrag. – Drako

+1

Können Sie mir bitte sagen, was ich beheben sollte, was ist falsch mit meinem Code neben dem, was ich oben beschrieben habe? – Drako

Antwort

0
cout << "Type in the gender: "; 
    getline(cin, gender); 
    cout << "Type in the clasification: "; 
    getline(cin, gender); 

Das Problem ist nicht mit den eingegebenen "Klassifizierung" in einer Datei zu speichern. Das Problem ist, dass Sie es in die falsche Variable lesen.

+0

Verdammt, ich habe es nicht bemerkt, Danke Mann. – Drako

+0

Aber ich kann den Inhalt immer noch nicht aus der Datei lesen. Weißt du, warum? – Drako

+0

Lesen Sie die Datei, indem Sie ein separates std :: ifstream-Objekt erstellen und es lesen, anstatt zu versuchen, das Objekt, das Sie zum Schreiben in die Datei verwenden, zu recyceln. –