如何在二进制文件中保存/读取结构体数组(内部具有链表)

时间:2019-05-26 19:38:40

标签: c linked-list binaryfiles fwrite fread

我正在完成一个赛车游戏,用户可以在其中创建冠军 有多个种族。

每场比赛都有他们的数据(圈数,最大用户数)和指向比赛中飞行员的链表的指针。

链表的每个飞行员都有一个指向数组的指针,用于存储每一圈的时间

基本上,我需要将冠军存储在二进制文件中,以便用户每次打开程序都可以继续获得冠军

import spacy
from spacy.attrs import ORTH, LEMMA

sent = "<sos> Hello There! <eos>"

nlp = spacy.load('en_core_web_sm')

nlp.tokenizer.add_special_case('<sos>', [{ORTH: "<sos>"}])
nlp.tokenizer.add_special_case('<eos>', [{ORTH: "<eos>"}])

for token in nlp(sent):
    print(token.text)

我获得了这个冠军奖杯

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;   

};

例如,如果冠军赛有3场比赛,我可以通过

访问它们
prace champ=getData() //ask's how many laps and then malloc(laps*sizeof(race))

我所做的读取功能

 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;

我看不到保存的功能是否正常,因为读取的功能不正常

0 个答案:

没有答案