//插入会员 void insert(mum *x) { int num,i; mumber *p,*q; p=x; printf("请输入你要插入位置: "); scanf("%d",&num); if(num>length)//大于链表长度时 { printf("没有找到该位置.按任意键继续..\n"); } else { printf("请输入你要插入的会员的编号、姓名、身份证号、电话、会员等级、优惠政策:\n"); q=(mum *)malloc(N); scanf("%s %s %s %s %s %s",p->number, p->name, p->id, p->Tel, p->grade, p->sale); for(i=0; i<num; i++) p=p->next; q->next=p->next; p->next=q; length++; print(x); printf("插入会员信息成功!\n"); return; } getch(); } 这段代码有什么问题
时间: 2024-01-14 12:05:07 浏览: 39
这段代码存在几个问题:
1. 在输入会员信息时,应该使用q指针而不是p指针,因为p指针已经指向了要插入的位置。
2. 在插入节点时,应该先进行边界判断,即num是否小于等于链表长度。如果大于链表长度,应该输出错误信息,否则会导致程序异常。
3. 在插入节点时,应该先分配新节点的内存,然后再将数据存入新节点。否则会导致内存泄漏。
4. 在插入节点后,应该及时更新链表的长度信息。
5. 在输出插入节点后的链表时,应该使用print函数而不是直接输出。
6. 在函数结尾处,应该添加return语句,以避免程序执行到下一个函数。
下面是修改后的代码:
```c
void insert(mumber *x) {
int num, i;
mumber *p, *q;
printf("请输入你要插入位置: ");
scanf("%d", &num);
if (num > length) { // 大于链表长度时
printf("没有找到该位置.按任意键继续..\n");
getch();
return;
}
printf("请输入你要插入的会员的编号、姓名、身份证号、电话、会员等级、优惠政策:\n");
q = (mumber *)malloc(sizeof(mumber));
scanf("%s %s %s %s %s %s", q->number, q->name, q->id, q->Tel, q->grade, q->sale);
p = x;
for (i = 1; i < num; i++) {
p = p->next;
}
q->next = p->next;
p->next = q;
length++;
print(x);
printf("插入会员信息成功!\n");
getch();
}
```