Highscore wird nicht in CSV abgespeichert
-
Hey Leute,
ich habe ein kleines Problem. Für ein Spiel wollen wir(meine Gruppe) einen Highscore in eine CSV-Datei speichern. Das Format der Speicherung ist Name , Runde.
Wenn ich wie im Code ein Beispiel mit in die Funktion gebe, löscht das Programm die bestehenden Werte und schreibt stattdessen nur ein ",". Wo liegt hier der Fehler? Funktioniert die Schleife nicht richtig oder scheiterts an der Konvertierung?
Wäre für eure Hilfe sehr dankbar
private: void highscoreSchreiben() { //Beispiel für Gewinner string nameGewinner = "Hans"; int rundenZahlGewinner = 9 ; using namespace std; int i = 0; //stringdaten werden hier als int abgespeichert s.U. int ersterPlatz, zweiterPlatz, dritterPlatz, vierterPlatz, fuenfterPlatz; char zeichen[100]; string daten[100]; //Stringstream zum konvertieren der Zahlen zu Strings stringstream ss; ss << rundenZahlGewinner; //Ein- und Auslesen ifstream highscoreLesen; highscoreLesen.open("speicherHighscore.csv"); ofstream highscoreSpeichern; highscoreSpeichern.open("speicherHighscore.csv"); if(!highscoreLesen.is_open()) { cerr << "Speicherstand ist nicht vorhanden!" << endl; } else { while (highscoreLesen.getline(zeichen, 100, ',')) { //ausgelesene chars werden in strings abgespeichert. daten[i] = zeichen; //Konvertieren ersterPlatz = atoi(daten[1].c_str()); zweiterPlatz = atoi(daten[3].c_str()); dritterPlatz = atoi(daten[5].c_str()); vierterPlatz = atoi(daten[7].c_str()); fuenfterPlatz = atoi(daten[9].c_str()); //Einsortieren if (rundenZahlGewinner<= ersterPlatz) { daten[9]=daten[7];daten[7]=daten[5];daten[5]=daten[3];daten[3] = daten[1]; daten[1] = ss.str(); daten[0] = nameGewinner; } else if (rundenZahlGewinner<= zweiterPlatz) { daten[9] = daten[7];daten[7]=daten[5];daten[5]=daten[3]; daten[3] = ss.str(); daten[2] = nameGewinner; } else if (rundenZahlGewinner<= dritterPlatz) { daten[9] = daten[7]; daten[7]=daten[5]; daten[5] = ss.str(); daten[4] = nameGewinner; } else if (rundenZahlGewinner<= vierterPlatz) { daten[9]=daten[7]; daten[7] = ss.str(); daten[6] = nameGewinner; } else if (rundenZahlGewinner<= fuenfterPlatz) { daten[9] = ss.str(); daten[8] = nameGewinner; } i++; } //In Datei schreiben highscoreSpeichern << daten[i] << "," << endl; } highscoreLesen.close(); highscoreSpeichern.close(); }
-
highscoreSpeichern << daten[i] << "," << endl;sollte das nicht innerhalb der while schleife sein?(noch vor dem i++;)
-
gesagt getan, jetzt ist die csv-datei komplett leer

private: void highscoreSchreiben() { //Beispiel für Gewinner string nameGewinner = "Hans"; int rundenZahlGewinner = 9 ; using namespace std; int i = 0; //stringdaten werden hier als int abgespeichert s.U. int ersterPlatz, zweiterPlatz, dritterPlatz, vierterPlatz, fuenfterPlatz; char zeichen[100]; string daten[100]; //Stringstream zum konvertieren der Zahlen zu Strings stringstream ss; ss << rundenZahlGewinner; //Ein- und Auslesen ifstream highscoreLesen; highscoreLesen.open("speicherHighscore.csv"); ofstream highscoreSpeichern; highscoreSpeichern.open("speicherHighscore.csv"); if(!highscoreLesen.is_open()) { cerr << "Speicherstand ist nicht vorhanden!" << endl; } else { while (highscoreLesen.getline(zeichen, 100, ',')) { //ausgelesene chars werden in strings abgespeichert. daten[i] = zeichen; //Konvertieren ersterPlatz = atoi(daten[1].c_str()); zweiterPlatz = atoi(daten[3].c_str()); dritterPlatz = atoi(daten[5].c_str()); vierterPlatz = atoi(daten[7].c_str()); fuenfterPlatz = atoi(daten[9].c_str()); //Einsortieren if (rundenZahlGewinner<= ersterPlatz) { daten[9]=daten[7];daten[7]=daten[5];daten[5]=daten[3];daten[3] = daten[1]; daten[1] = ss.str(); daten[0] = nameGewinner; } else if (rundenZahlGewinner<= zweiterPlatz) { daten[9] = daten[7];daten[7]=daten[5];daten[5]=daten[3]; daten[3] = ss.str(); daten[2] = nameGewinner; } else if (rundenZahlGewinner<= dritterPlatz) { daten[9] = daten[7]; daten[7]=daten[5]; daten[5] = ss.str(); daten[4] = nameGewinner; } else if (rundenZahlGewinner<= vierterPlatz) { daten[9]=daten[7]; daten[7] = ss.str(); daten[6] = nameGewinner; } else if (rundenZahlGewinner<= fuenfterPlatz) { daten[9] = ss.str(); daten[8] = nameGewinner; } //In Datei schreiben highscoreSpeichern << daten[i] << "," << endl; i++; } } highscoreLesen.close(); highscoreSpeichern.close(); }
-
Stellst du die Frage in allen Foren, die du finden kannst?
-
ja und ist das verwerflich?

-
ich weiss nicht genau was du da sortierst , aber in deiner ursprungsversion wurde ja nur a[10] ? in den file gepackt.
ansonsten vlt nach der whilefor(int i=0;i<10;i++) {highscoreSpeichern << daten[i] << "," << endl;}wenns immer noch leer gib dir mal daten[] nach jedem while durchgang aus.
-
es gibt ja schon eine csv datei die wir probehalber mit namen und zahlen gefüllt haben
Bert, 10
Hans, 12
etc.Wenn jetzt der beispielgewinner mit seinen 9 Runden dazu kommet müssen ja die bestehenden 5 Leute runtergestuft werden.
Das passiert über den Sortieralgo.
-
Hallo,
du liest und schreibst gleichzeitig aus bzw. in dieselbe Datei - das kann nicht gutgehen.
Also der einzige Weg ist:
1. Datei komplett lesen und Daten im Speicher halten
2. Neue Daten einsortieren
3. Daten wieder in Datei schreibenAm besten du erstellst dir für jeden der Schritte eine eigene Funktion!