maxotka14514 Temat założony przez niniejszego użytkownika |
[C] odczytanie danych z pliku binarnego - najlepsze wyniki w grze » 2016-05-04 12:14:37 Witam, mam mały problem - tworzę znaną wszystkim grę Snake i pracuję nad listą najlepszych wyników w grze, którą potem do niej przypnę. Punkty są zapisywane do pliku binarnego, nicki graczy do pliku tekstowego. Stworzyłam kilka plików, w każdym jest przykładowe imię, wszyscy mają domyślnie 0 punktów. Program pobiera nick i wpisuje przykładową liczbę punktów (chodzi o sprawdzenie poprawności) do tablicy struktur, która następnie jest sortowana (niższe wyniki spadają w dół) i elementy tej tablicy są zapisywane do odpowiednich plików. Potem odczytuję zawartość plików aby sprawdzić poprawność i działa... do czasu zakończenia pracy programu :( Nicki graczy są zapisywane ale po ponownym uruchomieniu programu okazuje się, że wszyscy dalej mają 0 punktów :( zapisana liczba znika... Bardzo zależy mi na tym, aby zapisane wyniki wyświetlały się prawidłowo przy każdym ponownym uruchomieniu programu. Czy któryś z Miłych Panów mógłby wspomóc damę w opałach? :) Tutaj jest kodzik: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define N 15 #define LENGTH 13 #define ELEMENTS 10 #define FILES 20
struct players { char nick[ N ]; int points; };
struct players gamers[ ELEMENTS ]; char nick[ N ]; int points;
char files[][ LENGTH ] = { "nick1.txt", "points1.bin", "nick2.txt", "points2.bin", "nick3.txt", "points3.bin", "nick4.txt", "points4.bin", "nick5.txt", "points5.bin", "nick6.txt", "points6.bin", "nick7.txt", "points7.bin", "nick8.txt", "points8.bin", "nick9.txt", "points9.bin", "nick10.txt", "points10.bin" };
void list_of_results( void ) { int i = 0, j = 0; puts( "List of results: " ); for( i = 0, j = 0; i + 1 < FILES, j < ELEMENTS; i = i + 2, j++ ) { FILE * file1 = fopen( files[ i ], "r" ); FILE * file2 = fopen( files[ i + 1 ], "b" ); fscanf( file1, "%s", gamers[ j ].nick ); fscanf( file2, "%d", gamers[ j ].nick ); fread( gamers[ j ].points, sizeof( gamers[ j ] ), 1, file2 ); printf( "\n%s\t%d\n", gamers[ j ].nick, gamers[ j ].points ); fclose( file1 ); fclose( file2 ); } }
void save_the_list( void ) { int i = 0, j = 0; for( i = 0, j = 0; i + 1 < FILES, j < ELEMENTS; i = i + 2, j++ ) { FILE * file1 = fopen( files[ i ], "w" ); FILE * file2 = fopen( files[ i + 1 ], "b" ); fprintf( file1, "%s", gamers[ j ].nick ); fwrite( gamers[ j ].points, sizeof( gamers[ j ] ), 1, file2 ); fclose( file1 ); fclose( file2 ); } }
void add_to_list() { int i = 0; for( i = 0; i < ELEMENTS; i++ ) { if( points > gamers[ i ].points ) { int j = ELEMENTS - 1; for( j = ELEMENTS - 1; j > i; j-- ) { strcpy( gamers[ j ].nick, gamers[ j - 1 ].nick ); gamers[ j ].points = gamers[ j - 1 ].points; } strcpy( gamers[ i ].nick, nick ); gamers[ i ].points = points; break; } } printf( "\n\nDEBUG:" ); int k = 0; for( k = 0; k < ELEMENTS; k++ ) printf( "\n%s\t%d\n", gamers[ k ].nick, gamers[ k ].points ); save_the_list(); }
void save_the_result( void ) { srand( time( 0 ) ); points = 100 + rand() % 900; printf( "DEBUG: %d\nPodaj nick:\n", points ); scanf( "%s", nick ); add_to_list(); }
int main( void ) { list_of_results(); save_the_result(); list_of_results(); return 0; }
|