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