Highscore einlesen/sortieren/schreiben
-
Hi!
Ich bin gerade dabei eine Highscore Klasse zu schreiben.
Erstmal soll die Highscore Datei so aussehen:txt.txt
player1 150 player2 100 player3 1000 player4 25 player5 888 player6 10000 player7 501 player8 100000
Mit dem Programm bin ich so weit:
main.cpp#include <iostream> #include <fstream> using namespace std; int main() { //add struct high with member score xD struct high { char* player; int points; } score[20]; //variables fstream file; int number; char name[20]; //open txt file file.open("txt.txt", ios::in); if(!file) { return 0; } //set default for(int j = 0; j <= 19; j++) { score[j].player = ""; score[j].points = 0; } //write the txt in the score while(!file.eof()) { //get str and number file >> name >> number; //ignore empty lines if(name[0] == '\0') { continue; } for(int j = 0; j <= 19; j++) { //sort it if(number > score[j].points) { for(int a = 19; a >= j; a--) { score[a] = score[a-1]; } score[j].points = number; score[j].player = name; break; } } } //output it for(int j = 0; j <= 19; j++) { if(score[j].player != "") { cout << score[j].player << " " << score[j].points << endl; } } cout << "" << endl; //close txt file.close(); return 0; }
Die Ausgabe sieht so aus:
player8 100000 player8 10000 player8 1000 player8 888 player8 501 player8 150 player8 100 player8 25
Die Punkte wurden ja richtig sortiert, aber der Name wird immer überschrieben, obwohl das ja garnicht sein kann.
Weiß jemand woran es liegt?Mfg PhiLLe
-
wenn ich das richtig seh sotierst du nur die werte die keinen bezug am schluss auf den nammen hat
anstlle namme und werte zu tauschen wie du es machst tausch doch die reihenfolge von deinen high structfor(int j = 0; j <= 19; j++) { //sort it if(number > score[j].points) { for(int a = 19; a >= j; a--) { score[a] = score[a-1]; } score[j].points = number; //macht deine probleme score[j].player = name; //macht deine probleme break; } }
macht deine probleme
du solltest lieber deine score tauschen anstelle die inhalte ist sicherer das der namme und die punkte weiter zusammen hängen
zudem würd ich bei einer so geringen anzahl einen bubblsot verwenden
http://de.wikipedia.org/wiki/Bubblesort
-
Das was mir Probleme machen soll, ist die eingabe.
for(int j = 0; j <= 19; j++) { //zählerschleife für jeden array meiner high struct //sort it if(number > score[j].points) { //Nur wenn die nummer größer ist als der vorgespeicherte wert for(int a = 19; a >= j; a--) { //alle aufrücken(noch unten; bis zu der stelle, wo der wert hin soll) score[a] = score[a-1]; } score[j].points = number; //jetzt erst wird eingetragen score[j].player = name; //und die aktuellen Werte bleiben zusammen break; } }
-
sry für doppelpost...
Ich tausche doch die score.
Aber bei der eingabe muss das ja wohl so...
-
du tauscht die inhalte deiner scors nicht die scors ansich
zudem ist das keine klasse sondern eine c struktur^^
wenn du meinst das deine eingabe nicht stimmt dann geb sie doch einfach aus
bzw mach mal den höchsten wert an 3 stelle und den nietrigsten an letzte und test es mal und schau ob der namme immer noch überall gleich ist