Prowizoryczna tabela wynikow, zapis do pliku i odczyt / C

0

(Nowy temat, bo nazwa tamtego nie odnosi sie juz do tego problemu).
Program ma już funkcje pobierającą imie/nick użytkownika (playerName), ma też funkcje (saveScore) która pobiera od funkcji gry (hangMan) wynik gracza i zapisuje ten wynik do pliku. Chcę to teraz połączyć, żeby funkcja pobierająca imie użytkownika także je zwracała do funkcji saveScore. Wtedy funkcja saveScore brałaby dwa argumenty (wynik i imie gracza) i zapisywałaby je do pliku w jednej linii (np. gracz Player, jego wynik 70, w pliku zapisane "1. Player - 70".) I tutaj jest problem, bo domyślam się, że funkcja playerName musi zwrócić tablice znaków, albo wskaźnik do jej pierwszego elementu, jak miałoby to wyglądać? Gdzie nie szukałem, wszędzie były odpowiedzi na postawie C++, co jednak sie troche różni. Także:

  1. Jak napisac funkcje zwracającą imie gracza i jak napisać tę funkcję jako zmienną (np. char a = funkcja(); ?)
  2. Jak dopisac do argumentu funkcji pobierającej imie gracza tę tablicę/wskaźnik.
  3. Wstawię też fragment kodu zapisującego wynik do pliku przerobiony prowizorycznie na kod, który zapisywałby wynik i imie gracza, do sprawdzenia.
int saveScore (int wynik, /*tutaj imie gracza jako argument */)
{
    FILE *plik;
    int score = wynik;
    /*w tym miejscu deklaracja zmiennej z imieniem gracza*/
 
    plik=fopen("highscore.txt", "a");
 
    fprintf(plik, "%s\t%i\n", /*imiegracza*/, score);
 
    fclose(plik);
}
0
  1. Interesuje cię imię gracza dopiero przed zapisem do pliku.
  2. Do pliku zapisuj raczej w formacie: fprintf(fd,"%u\t%s\n",score,player); pozwoli to nie przyjmować się spacjami w nazwie
  3. Nie ma sensu zapisywać do tej tablicy zbyt dużej ilości wyników, wystarczy top 10
    Więc:
  4. Stwórz sobie tabelkę struktur struct Fame { char player[65]; unsigned score; } tb[11];
  5. Wczytaj do niej wszystkie wyniki z pliku for(cnt=0;(cnt<10)&&(fscanf(fd," %u %64[^\n]s\n",&tb[cnt].score,tb[cnt].player)==2);++cnt)
  6. Jako pozycję cnt - wpisz nowe tb[cnt].score=score; scanf("%64[^\n]s",tb[cnt].player);
  7. Posortuj wg score
  8. Zapisz do pliku pierwszych min(10,cnt+1) wyników.

1 użytkowników online, w tym zalogowanych: 0, gości: 1