为什么只能显示数据显示文件第一行的信息?

通讯录管理系统的功能,显示保存在文件里的信息,但是只能显示第一行信息

img

你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,然后返回链表头指针即可显示多个