fprintf() tut nichts

ibafluss

Erfahrenes Mitglied
Hey Leute!

Bin grad dabei was zu schreiben, in dem dann auch Daten in einer *.txt-Datei gespeichert werden. Es handelt sich darum, dass ein Highscore gespeichert wird.
Hier der Code:

Code:
void highscoreabfrage (int cou, FILE *scores)
{
    int i, a, highscore, j, s_wert;      // in a werden die Plätze der eingelesenen Rangliste gespeichert. In highscore werden die scores der Plätze der eingelesenen Rangliste gespeichert.
    char puffer[20], save[20];           // in s_wert wird der Rückgabewert von scanf() gespeichert

    scores = fopen ("Snake_Highscore.txt", "r+");
    if (scores == NULL)
    {
        printf ("\nHighscores nicht verfuegbar ...\n\n");

        return;
    }
    else
    {
        for (i = 0; i < 5; i++)
        {
            s_wert = fscanf (scores, "%d. %d\n", &a, &highscore);
            if (s_wert != 2)                               // Falls es vor dem Ende zu einer fehlerhaften Eingabe kommen sollte
            {
                fprintf (stderr, "\nFehler beim Speichern der Highscore ...\n\n");

                return;
            }

            if (cou > highscore)
            {
                fseek (scores, 0L, SEEK_SET);

                for (j = 0; j < i; j++)
                {
                    fgets (puffer, 20, scores);
                }

                fprintf (scores, "%d. %d\n", j+1, cou);     // Der neue Wert wird an der passenden Stelle eingefügt und die Highscore wird überschrieben
                
                printf ("\nGratulation! Du hast im Highscore den %d.Platz erreicht!\n\n", j+1);


               fgets (save, 20, scores);
               fseek (scores, 0L, SEEK_SET);

               for (j = 0; j < i+1; j++)
               {
                   fgets (puffer, 20, scores);
               }

               if (j == 5)
               {
                   return;
               }

               fprintf (scores, "%d. %d\n", i+2, highscore);    // Jetzt wird der vom Vergleich gespeicherte Werte einen Platz darunter eingefügt

               for (i = i+2; i < 5; i++)
               {
                   fprintf (scores, "%s", save);
                   fseek (scores, 0L, SEEK_SET);

                   for (j = 0; j < i; j++)
                   {
                       fgets (puffer, 20, scores);
                   }
                   fgets (save, 20, scores);
               }

               return;
            }
        }
        printf ("\nSie haben es leider nicht in die Highscore geschafft ...\n\n");

        return;
    }
}

Das Problem ist das fprintf() in der 34.Zeile. Wenn die Highscore auf 0 ist und man also quasi das erste Mal spielt, funktioniert alles bestens und man ist dann logischerweise erster. Nur ab dem zweiten mal abspeichern funktioniert das oben genannte fprintf() nicht. Ich habe auch einmal ein system("pause") direkt nach dem fprintf() geschrieben, um nachzusehen ob das fprintf() wirklich nichts tut und es ist so.

Weiß jemand was da zu machen ist?

Lg: Ibafluss
 
Moin,

Nur ab dem zweiten mal abspeichern funktioniert das oben genannte fprintf() nicht

Was genau meinst Du damit?
Ist "scores" nicht gefüllt? Wird der Teil überhaupt durchlaufen?

Davon abgesehen sind an der Stelle Deine Variablen j und cou Integer-Werte und sollten somit besser mit %i formatiert werden, nicht mit %d !!

Gruß
Klaus
 
Zuletzt bearbeitet:
Du solltest die score am Ende des Programmes mit fclose(score) schliessen, sonst wird gar nichts auf die Platte geschrieben.

Gruss
cwriter
 
vfl_freak: Das fprintf wird durchlaufen und dem Rückgabewert von fprintf zufolge sollte auch alles richtig passiert sein. Trotzdem ändert sich in der *.txt-Datei nichts.
Ich schreibe für Integer immer %d. Was ist denn genau der Unterschied zwischen %d und %i?

cwriter: Also ob ich das fclose schreibe oder nicht, macht keinen Unterschied, da am Ende des Programmes ja der ganze reservierte Speicher wieder freigegeben wird. Außerdem funktioniert es ja das 1.Mal.
 
Zuletzt bearbeitet:
Hab ich gemacht und hier gibt mir fprintf() als Rückgabewert -1 zurück. Ich weiß jedoch nit, was falsch ist.
Wenn ich im normalen Programm den Rückgabewert ausgebe, bekomme ich 5 zurück, das ist korrekt. Nur befindet sich im Programm und in dem neuen Programm von der Funktion derselbe Inhalt.
 
Hab ich gemacht und hier gibt mir fprintf() als Rückgabewert -1 zurück. Ich weiß jedoch nit, was falsch ist.
Wenn ich im normalen Programm den Rückgabewert ausgebe, bekomme ich 5 zurück, das ist korrekt. Nur befindet sich im Programm und in dem neuen Programm von der Funktion derselbe Inhalt.

ICH ( meine Meinung ) würde so etwas serialisieren. Kann man wunderbar mit Boost machen ...
 
Hab ich gemacht und hier gibt mir fprintf() als Rückgabewert -1 zurück. Ich weiß jedoch nit, was falsch ist.
Zeig das Programm und ggf. den Aufruf desselbigen.
Wenn ich im normalen Programm den Rückgabewert ausgebe, bekomme ich 5 zurück, das ist korrekt. Nur befindet sich im Programm und in dem neuen Programm von der Funktion derselbe Inhalt.
Dann hast du entweder einen Fehler im Programm oder deine Diagnose ist fehlerhaft. Probiere das Programm soweit zu minimieren so dass der Fehler immer noch auftritt und stelle es hier rein.

Gruß
 
Zurück