通讯录管理系统的功能,显示保存在文件里的信息,但是只能显示第一行信息
你init()函数中只读取了一次啊,肯定只有一条啊,需要用while循环读取
参考代码如下:
带头节点的链表写法:
//带头节点的链表的写法,也就是第一个节点中不存储数据
void init()
{
FILE* fp;
stu* p, * t;
head = (stu*)malloc(sizeof(stu)); //修改1,这里直接用head
head->next = 0;
p = head;
int count = 0;
char file[15];
printf("初始化...\n请输入加载数据的文件名:");
scanf("%s", file);
//到重新打开文件这里
fp = fopen(file, "r");
if (fp) //在这里判断文件是否打开就可以
{
while (!feof(fp))
{
stu* t = (stu*)malloc(sizeof(stu)); //
t->next = 0;
if (fscanf(fp, "%s%s%s%s", t->name, t->wm, t->stel, t->home))
{
p->next = t;
p = t;
count++;
}
else
free(t);
}
fclose(fp);
}
else
{
printf("返回主菜单!\n");
return;
}
}
不带头节点的链表写法:
//不带头节点的链表写法(也就是第一个节点中保存数据)
void init()
{
FILE* fp;
stu* p, * t;
int flag = 0;
int count = 0;
char file[15];
printf("初始化...\n请输入加载数据的文件名:");
scanf("%s", file);
//到重新打开文件这里
fp = fopen(file, "r");
if (fp) //在这里判断文件是否打开就可以
{
while (!feof(fp))
{
stu* t = (stu*)malloc(sizeof(stu)); //
t->next = 0;
if (fscanf(fp, "%s%s%s%s", t->name, t->wm, t->stel, t->home))
{
count++;
if (flag == 0) //第一次读取
{
head = t;
p = t; flag == 1;
}
else
{
p->next = t;
p = t;
}
}
}
fclose(fp);
}
else
{
printf("返回主菜单!\n");
return;
}
}
因为你只读取了一个值,所以只显示一个,读一个数据要保存一个数据,读的数据都保存到链表,链表最后一个元素指针设为Null,然后返回链表头指针即可显示多个