struct Bookinfo\x0d\x0a{\x0d\x0achar num[20]//书号\x0d\x0a char name[10] //书名\x0d\x0a int jinjia //进价\x0d\x0a int shoujia //售价\x0d\x0a int shuliang//侍核培库存数量\x0d\x0a int shouchu //售出\x0d\x0a}\x0d\x0atypedef struct Node_book* pNode_book\x0d\x0astruct Node_book\x0d\x0a{\x0d\x0astruct Bookinfo bookinfo\x0d\x0apNode_book next\x0d\x0a}\x0d\x0a只存节点的数据域,以二进制
文件存放:\x0d\x0aint save(struct pNode_book head)\x0d\x0a{\x0d\x0aif(!head) return 0\x0d\x0aFILE *fp=fopen("info.data","wb")\x0d\x0aint i=0\x0d\x0awhile(head)\x0d\x0a{\x0d\x0afwrite(&head->bookinfo,sizeof(Bookinfo),1,fp)\x0d\x0ai++\x0d\x0ahead=head->next\x0d\x0a}\x0d\x0afclose(fp)\x0d\x0a\x0d\x0areturn i\x0d\x0a} \x0d\x0a\x0d\x0aint readFromFile(struct pNode_book *head)\x0d\x0a{\x0d\x0aFILE *fp=fopen("info.data","rb")\x0d\x0aif(!fp)\x0d\x0a{\x0d\x0aprintf("Can not open the file!\n")\x0d\x0areturn 0\x0d\x0a}\x0d\x0a\x0d\x0astruct pNode_book pCur=NULL\x0d\x0afseek(fp,0,SEEK_END)\x0d\x0along end=ftell(fp)\x0d\x0afseek(fp,0,SEEK_SET)\x0d\x0aint i=0\x0d\x0aif(ftell(fp)!=end)\x0d\x0a{\x0d\x0apNode_book tmpNode=(pNode_book)malloc(sizeof(Node_book))\x0d\x0atmpNode->next=NULL\x0d\x0a\x0d\x0afread(&tmpNode->bookinfo,sizeof(Bookinfo),1,fp)\x0d\x0ai++\x0d\x0a\x0d\x0a*head=tmpNode\x0d\x0apCur=*head\x0d\x0a}\x0d\x0aelse\x0d\x0a{\x0d\x0aprintf("No record!\n")\x0d\x0areturn 0\x0d\x0a}\x0d\x0a\x0d\x0awhile(ftell(fp)!=end)\x0d\x0a{\x0d\x0apNode_book tmpNode=(pNode_book)malloc(sizeof(Node_book))\x0d\x0atmpNode->next=NULL\x0d\x0a\x0d\x0afread(&tmpNode->bookinfo,sizeof(Bookinfo),1,fp)\x0d\x0ai++\x0d\x0a\x0d\x0apCur->next=tmpNode\x0d\x0apCur=pCur->next\x0d\x0a}\x0d\x0a\x0d\x0afclose(fp)\x0d\x0areturn i\x0d\x0a} \x0d\x0a\x0d\x0a//在vc++下编译。如果在TC下,可能还要做些小修改。\x0d\x0a//我在记事本上写的,老唯你氏镇调试下吧!\x0d\x0a//有问题Hi我!while(!feof(fp2))
{
fread(p2,LEN,1,fp2)
printf("%s\n%s\拦瞎n%f\n%f\n%d\n%s\n\n",p2->jiaori,p2->ruri,p2->jiaoe,p2->jiaoye,p2->count,p2->addr)
p2++// p2=p2->纯慧next
}···
把 p2++这句去掉就对了,p2++将使p2指向一个不合法的地址。这个例子里只是将文件中的内容读出来显示,所以每次读入p2中输出就可以了,如果是需要将整个文件内容都读到内存,需要每读简裤空一次都要为其分配一个空间。
评论列表(0条)