Also ich muss mich korrigieren ich bekomme von fprintf() immer als Rückgabewert 5 und das ist korrekt, da 5 Zeichen übertragen werden sollten. Nur werden sie eben nicht übertragen. Ich hab auch gleich nach fprintf() das Programm mit system("pause") angehalten und hab di *.txt-Datei geöffnet, da ich vermutet hatte, dass das geänderte überschrieben wird, aber auch das war nicht der Fall.
Hier ist der Quellcode, es geht darum, dass eine Highscore an der richtigen Stelle gespeichert wird:
Hier ist der Quellcode, es geht darum, dass eine Highscore an der richtigen Stelle gespeichert wird:
Code:
void highscoreabfrage (int cou, FILE *scores)
{
int i, a, highscore, j, s_wert, c; // 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);
}
c = fprintf (scores, "%d. %d\n", j+1, cou); // Der neue Wert wird an der passenden Stelle eingefügt und die Highscore wird überschrieben
printf ("%d", c);
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);
}
fclose (scores);
return;
}
}
printf ("\nSie haben es leider nicht in die Highscore geschafft ...\n\n");
return;
}
}