该函数工作不正常,它只删除id_capt并将另一个的值更改为零...
Besides I want to do verification that the sensor does belong to the list but it's not working
void suppression_capt(Liste* liste)//id donner par utilisateur a modifier
{
float new_longitude,new_latitude;//vals a modifier
char id_capt_user[10];
Element *courant = liste->premier;
Element *precedent =courant;
printf("donner id_capt= ");
scanf("%s",id_capt_user);
while(courant != NULL)
{
if(strcmp(courant->capt.id_capt,id_capt_user)==0)
{
precedent=courant->suivant;
free(courant);
}
courant=courant->suivant;
}
printf("\n");
}
此外,我想验证传感器是否属于列表,但它不工作
/*do
{
printf("donner id_capt= ");
scanf("%s",id_capt_user); //verification du capteur
courant=courant->suivant;
}while(strcmp(courant->capt.id_capt,id_capt_user)!=0);*/
这是我用的结构体
typedef struct//valeur d'une cellule/noeud
{
char id_capt[10];
float longitude;
float latitude;
}capt_hum;
typedef struct//liste chainee
{
capt_hum capt;
struct Element* suivant;
struct Element* precedent;
}Element;
2条答案
按热度按时间vptzau2j1#
您应该注意,您正在访问一个已经释放的指针
至于从链表中删除一个元素,释放它是不够的,因为你还需要更新元素的邻居。假设你有一个链表,如下所示:A <->B <->C如果您希望删除B,则还需要更新A和C以使其相互指向A <->C
通过这个实现,你可以迭代整个列表,并删除包含你输入的字符串的任何节点。如果你想在找到要删除的节点后停止查找,你可以用“break”替换注解行。你应该添加一些检查,检查要删除的节点是第一个还是最后一个,这样你就不会在指针为NULL或垃圾时意外地试图分配它们。
js81xvg62#
在看过并尝试过之后,因为我对双向链表还是个新手,所以这个程序工作了
}
我知道我必须有两个指针prev和next和thanx到这个函数我有更好的理解和链接发送的Roberet先生