#C语言 链表 结构体 操作

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

img


img

我的思路是创建一个链表后,输入几行数据,再对链表做中间插入的处理。但我在创建链表的时候,输入了一行数据,按回车后就程序运行完了 想知道哪里出错了

你的main函数呢?设置断点一步一步调试。

创建函数修改如下,供参考:

#include <stdio.h>
#include <stdlib.h>
struct resident_i {
    int  id;
    char name[16];
    long tel;
    char sex[4];
    int  age;
    char origin[32];
    char home[32];
    struct resident_i* next;
};
struct resident_i* creat()
{
    int n = 0, id;
    struct resident_i* head = NULL, * p1, * p2;
    //p1 = p2 = (struct resident_i*)malloc(sizeof(struct resident_i));
    printf("Please enter id name tel sex age origin home \n");
    //scanf("%d %s %ld %s %d %s %s", &p1->id, p1->name, &p1->tel, 
    //                   p1->sex, &p1->age, p1->origin, p1->home);
    while (1) { //(p1->id != 0)
        scanf("%d", &id);
        if (id == 0)  break;
        p1 = (struct resident_i*)malloc(sizeof(struct resident_i));
        p1->next = NULL;
        p1->id = id;
        scanf("%s %ld %s %d %s %s", p1->name, &p1->tel, 
                           p1->sex, &p1->age, p1->origin, p1->home);
        n++;
        if (n == 1)
            head = p1;
        else
            p2->next = p1;
        p2 = p1;
    }
    //p2->next = NULL;
    return head;
}
void print(struct resident_i* h)
{
    struct resident_i* p = h;
    while (p) {
        printf("%d %s %ld %s %d %s %s\n", p->id, p->name,
               p->tel, p->sex, p->age, p->origin, p->home);
        p = p->next;
    }
}
int main()
{
    struct resident_i* head = NULL;
    head = creat();
    print(head);
    return 0;
}