Bonjour,
Je souhaiterais savoir comment éliminer un élement ayant une certaie valeur de ma liste.
Voici ce que j'ai réalisé. Toutefois, mon programme plante.
Le débuggeur ne me renvoie rien en retour. Je ne vois pas d'où l'erreur survient.
Merci par avance de votre aide.Code:typedef struct Point { int identifiant; double abscisse; double ordonee; struct Client *suivant; }client; typedef struct ListeRepere { client *debut; client *fin; int taille; }llist; /*================================================= initialisation liste chainee simple ===================================================*/ void initialisation_llist (llist *liste){ liste->debut = NULL; liste->fin = NULL; liste->taille = 0; } /*================================================= ajouter element en tete dans ma liste chainee simple ====================================================*/ int ins_debut_liste (llist * liste, int id, double abs, double ord){ client *nouveau; if ((nouveau= (client *) malloc (sizeof (client))) == NULL) return -1; nouveau->identifiant = id; nouveau->abscisse = abs; nouveau->ordonee = ord; nouveau->suivant = NULL; nouveau->suivant = liste->debut; liste->debut = nouveau; liste->taille++; return 0; } /*========================================================================== fonction supprimer client de ma liste client ===========================================================================*/ void supprimerElement(client *p, int valeur) { client *t = p; while( (p = p->suivant) != NULL) { if(p->identifiant == valeur) { t->suivant = p->suivant; free(p); break; } t = p; } } /*================================================= affichage element de ma liste chainee simple ===================================================*/ void affiche (llist * liste){ client *courant; courant = liste->debut; while (courant != NULL){ printf ("%d\n", courant->identifiant); courant = courant->suivant; } } /*================================================= destruction de ma liste chainee simple ===================================================*/ int supp_debut (llist * liste){ if (liste->taille == 0) return -1; client *supp_element; supp_element = liste->debut; liste->debut = liste->debut->suivant; if (liste->taille == 1) liste->fin = NULL; liste->taille--; return 0; } void detruire (llist * liste){ while (liste->taille > 0) supp_debut (liste); } /*================================================= programme principal ===================================================*/ int main (void) { llist *ma_liste; if ((ma_liste = (llist *) malloc (sizeof (llist))) == NULL) return -1; client *p; int id; double abs; double ord; int i,j; FILE *fp = NULL; initialisation_llist (ma_liste); if (ma_liste!= NULL) printf("la liste est non vide \n"); if ((fp = fopen("D:\\Codes\\TS2004t3\\test.txt", "r"))== NULL) { printf("Impossible d'ouvrir fichier donnees .txt \n"); exit (-1); } else { for (i=0;i<24;i++) { fscanf(fp,"%d %lf %lf ",&id,&abs,&ord,); ins_debut_liste(ma_liste,id,abs,ord); } } supprimerElement(p,15); affiche (ma_liste); detruire (ma_liste); getchar(); return 0; }
-----