请高手进来帮忙看下这程序
想用链表做个通讯录,链表储存好象已经没问题了,但是如何从文件里调出链表出了问题,子程序不写了,不影响阅读.程序中间片段调试正常,关键问题是将链表储存到文件和从文件里读出链表
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include"E:\我的个人文件\编程\个人练习\结构体\建立链表 函数\建立链表 函数.h"
#include"E:\我的个人文件\编程\个人练习\结构体\输出链表 函数\输出链表 函数.h"
#include"E:\我的个人文件\编程\个人练习\结构体\插入链表 函数\插入链表 函数.h"
#include"E:\我的个人文件\编程\个人练习\结构体\删除链表 函数\删除链表 函数.h"
#define LENTH sizeof(struct student)
#define NUL 0
extern struct student *found(); //声明“建立链表”函数
extern struct student *add(struct student *head); //声明“插入链表”函数
extern struct student *del(struct student *head); //声明“删除链表”函数
extern void print(struct student *head); //声明“输出链表”函数
int main()
{
int m=0,i=0,n=0;
FILE *fp1;
char ch;
struct student *head,*p1,*p2,*p3;
char choose;
p3=(struct student *)malloc(LENTH);
printf("是否读入文件:");
scanf("%c",&ch);
if(ch=='Y')
{
if((fp1=fopen("student_list","rb"))==NUL)
printf("read error!");
fread(p3,4,1,fp1);
head=p3;
fclose(fp1);
}
else
{
head=found();
}
do
{
printf("请输入你要进行的操作A.输出B.插入C.删除D.退出:");
fflush(stdin);
scanf("%c",&choose);
if(choose=='A')
print(head);
else if(choose=='B')
head=add(head);
else if(choose=='C')
head=del(head);
}
while(choose!='D');
p1=p2=head;
while(p1!=NUL)
{
p1=p2->next;
p2=p1;
m++;
}
p1=p2=head;
fp1=fopen("student_list","wb");
while(p2!=NUL)
{
p1=p2->next;
n++;
if(fwrite(p2,LENTH,1,fp1)!=1)
printf("file write error\n");
if(n==1)
p3=p2;
p2=p1;
}
fclose(fp1);
getch();
return 0;
}
其中结构体定义在子程序里,为:
struct student
{
long num;
char name[10];
char sex[6];
char phone[12];
struct student *next;
};
我用的是动态链表啊,调用和储存文件时用指针做啊,不要教我定义结构体数组那种方法,那样浪费内存,别又是无语啊,文件操作我真的不明白,书上说的太简单了,例题只给方法不给原理,换了题型后就不知道该怎么操作了
每次读入文件时只有一个数据是对的,就是链表的第一个节点处的num是对的,其余的全是乱码
以下图片是我存入链表后运行读出的结果,该链表储存有3个节点
补充一下,我用的是VC++6.0编译工具!!
[[it] 本帖最后由 yaozheng 于 2008-5-3 19:58 编辑 [/it]]