void shanchu() { char str1[10]; char str2[10]; struct chexinxi *p,*pr,*head2; p=head2=duqu(); if(head2==NULL) { printf("\t\t\t\t无内容!\n"); return NULL; } printf("\t\t\t\t请输入要删除的记录内容:\n"); printf("\t\t\t\t车型号:"); scanf("%s",str1); printf("\t\t\t\t车牌号:"); scanf("%s",str2); while(strcmp(str1,p->chexinghao)!=0&&strcmp(str2,p->chepaihao)!=0&&p->next!=NULL) { pr=p; p=p->next; } if(strcmp(p->chexinghao,str1)==0&&strcmp(str2,p->chepaihao)==0) { if(p==head) head=p->next; else pr->next=p->next; free(p); } else printf("\t\t\t\t记录为空!\n"); return head; }为什么错了
时间: 2024-02-20 22:00:05 浏览: 48
这段代码中有几个错误:
1. 函数定义时没有指定返回值类型,应该加上返回值类型 `struct chexinxi*`。
2. `duqu()` 函数没有定义,应该在调用之前先定义好。
3. 在 `while` 循环中,判断条件有误,应该同时判断车型号和车牌号是否相等,并且如果找到匹配的记录应该跳出循环。
4. 在删除记录时,应该先判断是否找到匹配的记录再进行删除操作,否则会出现错误。
下面是修改后的代码:
```c
struct chexinxi* shanchu() {
char str1[10];
char str2[10];
struct chexinxi *p, *pr, *head2;
head2 = duqu();
if (head2 == NULL) {
printf("\t\t\t\t无内容!\n");
return NULL;
}
printf("\t\t\t\t请输入要删除的记录内容:\n");
printf("\t\t\t\t车型号:");
scanf("%s", str1);
printf("\t\t\t\t车牌号:");
scanf("%s", str2);
p = head2;
pr = NULL;
while (p != NULL) {
if (strcmp(p->chexinghao, str1) == 0 && strcmp(p->chepaihao, str2) == 0) {
if (p == head2) {
head2 = p->next;
} else {
pr->next = p->next;
}
free(p);
return head2;
}
pr = p;
p = p->next;
}
printf("\t\t\t\t记录不存在!\n");
return head2;
}
```
阅读全文