如何从C中的列表中删除值a,按元素搜索?
我试图删除我的列表中的一个值,但它停止工作,它被调用。这就是我要删除的功能:如何从C中的列表中删除值a,按元素搜索?,c,list,C,List,我试图删除我的列表中的一个值,但它停止工作,它被调用。这就是我要删除的功能: int Excluir_Cadastro_paciente (C_paciente **inicio_cadastro_paciente,char cpf[12]) { C_paciente *aux,*per; if (*inicio_cadastro_paciente == NULL) { printf("\nEmpty List\n"); return 1; } else {
int Excluir_Cadastro_paciente (C_paciente **inicio_cadastro_paciente,char cpf[12])
{
C_paciente *aux,*per;
if (*inicio_cadastro_paciente == NULL)
{
printf("\nEmpty List\n");
return 1;
} else {
int achou = 0;
per = *inicio_cadastro_paciente;
aux = *inicio_cadastro_paciente;
while(per != NULL) {
if(strcmp(per->CPF , cpf) == 0 ){ //Achou
aux = per;
per = per->prox;
aux->prox = per->prox;
free(per);
achou = 1;
printf("Removed!");
break;
return 0;
} else {
per = per->prox;
}
}
if(achou != 1){
printf("Impossible to remove");
}
return 0;
}
}
我的结构:
struct cadastro_Paciente {
char CPF[12];
struct cadastro_Paciente *prox;
};
typedef struct cadastro_Paciente C_paciente;
因此,用户键入一个名为cpf的var,然后函数搜索并删除它。我猜您删除了错误的项,不是在strcmp(per->cpf,cpf)==0中找到的项,而是下一项:
我认为您对指针
aux
和per
感到有点困惑。此外,尽管您将head作为双指针传递,但不会对head反映任何可能的更改,因为您只使用该指针来获取指向指针的初始值
你不需要指针。只需使用双指针作为迭代器。I包含开头的头部地址和迭代时prox
成员的地址
找到要删除的节点后,可以通过该指针更新列表来跳过该节点
这是函数的更新版本。(我还没有测试过这段代码。我还冒昧地将inicio\u cadastro\u paciente
重命名为pac
。更简短的是,在第一次迭代后,它不再是inicio。)
你能把你的代码格式化吗?是的。现在好点了吗?虽然我很感激,但不是真的。。。
per = per->prox;
free(per);
int Excluir_Cadastro_paciente(C_paciente **pac, const char *cpf)
{
if (*pac == NULL) {
printf("Empty List\n");
return 1;
}
while ((*pac) != NULL) {
if (strcmp((*pac)->CPF, cpf) == 0) {
C_paciente *del = (*pac);
*pac = (*pac)->prox;
free(del);
printf("Removed!\n");
return 0;
}
pac = &(*pac)->prox;
}
printf("Nothing removed!\n");
return 1;
}