Я заканчиваю игру по автомобильным гонкам, в которой пользователь может создать чемпионат с несколькими гонками.
Каждая гонка имеет свои данные (заезды, максусерверы) и указатель на связанный список пилотов, которыегонки в гонке.
Каждый пилот из связанного списка имеет указатель на массив для хранения своего времени на каждом круге
В основном мне нужно сохранить чемпионат в двоичном файле, чтобы пользователь могпродолжать чемпионат каждый раз, когда он открывает программу
typedef struct dataPair pair, *ppair;
typedef struct dataRace race, *prace;
struct dataRace{
int laps;
int size;
int maxUsers;
ppair pilots;
};
struct dataPair {
pilot p; //piloto
car c; //carro
int *times; // pointer for the times
ppair next;
};
Я получил этот массив для чемпионата
prace champ=getData() //ask's how many laps and then malloc(laps*sizeof(race))
, например, если в чемпионате 3 гонки, я получаю к ним доступ с помощью
champ[0]\\ 1º race
champ[1]\\ 2º race
champ[2]\\ 3º race
Функция чтения, которую я сделал
f = fopen("champ.dat", "rb");
fread(&nraces, sizeof(int), 1, f); //read's how many races there are
prace champ=malloc(nraces*sizeof(race));
ppair headpil=NULL;
for(i=0; i<nraces; i++){
fread(&(champ[i]), sizeof(race),1, f);
npils=champ[i].maxUsers;
nlaps=champ[i].laps;
for(x=0;x<npils;x++){
ppair newpil=malloc(sizeof(pair));
fread(&newpil, sizeof(pair), 1,f);
fread(&nraces->times,nlaps*sizeof(int),1,f);
newpil->next=headpil;
headpil=newpil;
}
champ[i].pilots=headpil;
}
return champ;
Функция записи, которую я сделал
void saveChamp(prace list, int nraces){
FILE *f;
int i;
ppair pilots;
f = fopen("champ.dat", "wb");
fwrite(&nraces, sizeof(int), 1, f);
for(i=0; i<nraces; i++){
int tam=list[i].laps;
fwrite(&(list[i]), sizeof(race), 1, f);
pilots=lista[i].pilots;
while(pilots!=NULL){
fwrite(pilots, sizeof(pair), 1, f);
fwrite(pilots->times,tam *sizeof(int),1,f);
pilots=pilots->next;
}
}
}
Я не вижу, работает ли функция, которая сохраняет, потому что функция, которая читает, не работаетработает