前辈来指导一下 链表写入文件的问题
写好了链表,想把链表存到文件中 以便于调用 怎么写?我用fwrite写了 可是文件里是乱码!希望前辈给指导指导 感激不尽!链表创建没有问题 关键是写入的那一块
如果我的这个实在是牛头不对马嘴,那请写个正确的让我研究研究 谢谢了
#include <stdio.h>
#include <stdlib.h>
#define NULL 0
#define LEN sizeof(struct student)
typedef struct student
{
long num; /*学号*/
float score; /*分数*/
struct student *next; /*指向下一节点的指针*/
}node;
int n; /*节点总数*/
node *Create();/*链表创建函数*/
void Link_file(node *head);/*写入函数*/
void main()
{
node *temp;
temp = Create();
Link_file(temp);
return;
}
node *Create()
{
node *head; /*头节点*/
node *temp=NULL; /*temp保存创建的新节点的地址*/
node *tail=NULL; /*tail保存原链表最后一个节点的地址*/
n = 0; /*创建前链表的节点总数为0:空链表*/
temp = (node *)malloc(LEN); /*开辟一个新节点*/
tail = temp; /*如果节点开辟成功,则tail先把它的指针保存下来以备后用*/
if (temp== NULL) /*节点开辟不成功*/
{
printf("\n创建失败,请稍后再试!\n");
return NULL;
}
else /*节点开辟成功*/
{
head = NULL; /*开始head指向NULL*/
printf("请输入第%d个节点 -- num,score: ",n+1);
scanf("%ld,%f",&temp->num,&temp->score); /*录入数据*/
}
while(temp->num != 0) /*只要学号不为0,就继续录入下一个节点*/
{
n += 1; /*节点总数增加1个*/
if (n==1) /*如果节点总数是1,则head指向刚创建的节点temp*/
{
head = temp;
tail->next = NULL;
}
else
tail->next = temp; /*指向上衣循环刚开辟的节点*/
tail = temp; /*把temp的地址给tail保留,然后temp去产生新节点*/
temp= (node *)malloc(LEN);
printf("请输入第%d个节点 -- num,score: ",n+1);
scanf("%ld,%f",&temp->num,&temp->score);
}
tail->next = NULL;
free(temp); /*释放temp*/
temp = NULL; /*把释放的变量清空置为NULL。。*/
return head; /*返回创建链表的头指针*/
}
void Link_file(node *head)
{
node *p;
FILE *fp;
p = head;
if((fp=fopen("e:\\c++\\In_Out\\Link_file.txt","wb+"))==NULL)/*我的文件所在地*/
{
printf("打开失败!");
exit(0);
}
while(p!= NULL)
{
fwrite(p,LEN,1,fp);
p=p->next;
}
fclose(fp);
return;
}