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 struct

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


Anmelden zum Antworten