void elete(void)
{
int i,number;
struct part *cur,*prev;//两个指针,一前一后
printf("Enter part number:");//输入零件编号
scanf("%d",&number);
i=find_part(number);//调用之前的查重函数
if(i>=0){//i>=0代表此零件存在
for(cur=first,prev=NULL;cur!=NULL && cur->number!=number;prev=cur,cur=cur->next)//两个指针跟着向后移动,cur==NULL停,cur->number==number也停
;
}
if(cur==NULL)//到最后节点没找到此编号
printf("Not found");
if(prev==NULL)//删除节点为首节点的特殊情况
first=first->next;
else
prev->next=cur->next;//删除首节点以外节点的情况
free(cur); //释放
}
另外一下是插入零件的函数,插入的时候自动形成链表。是不是插入函数有错?
void insert(void)
{
int i=0,part_number;//struct part temp;
if(num_parts==max_parts){
max_parts+=1;
inventory=realloc(inventory,max_parts(sizeof(struct part)));
/*if(temp==NULL){
printf("Insufficient memory;?can't add more parts.\n");
return;
}*/
//inventory=temp;
}
printf("Enter part number:");
scanf("%d",&part_number);
if(find_part(part_number)>=0){
printf("Part already exists.\n");
return;
}
inventory[num_parts].number=part_number;
printf("Enter part name:");
read_line(inventory[num_parts].name,NAME_LEN);
printf("Enter quantity on hand:");
scanf("%d",&inventory[num_parts].on_hand);
printf("Enter price:");
scanf("%f",&inventory[num_parts].price);
inventory[num_parts].next=first;
first=inventory;
(num_parts)++;
}
找了半天实在找不到错误了。此为书上习题,在加入elete函数之前是正常运行的。后来书上要求加一个删除函数,可以从数据库中删除零件。