Bonjour à tous.
Je bloque sur ce qui sera surement pour vous un détail.
Je m'explique, lors d'un ajout en tête ou en queue, j'aimerais insérer un maillon créé précédemment mais je n'y arrive pas.
Voici la structure qui sert pour la liste chaînée:
La fonction d'ajout en tête:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 typedef struct pile { char nom_prog[20]; char pseudo[20]; char taille_fichier[20]; char fichier[256]; struct pile *prec; }pile;
Pour charger la liste avec toutes les infos qui sont lues à partir d'un fichier:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void ajouter_tete(pile **MaPile, pile **m){ pile *element = malloc (sizeof(pile)); //creation d'un nouveau chainon strcpy(element->pseudo,(*m)->pseudo); element->prec = *MaPile; *MaPile = element; }
Et enfin le main:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void charg_liste(pile **MaPile){ pile *m; m= malloc (sizeof(pile)); m->prec = NULL; /* puis les champs pseudos, taille_fichier,... sont renseignés */ ajouter_tete(MaPile,&m); }
Ainsi, dans la fonction d'ajout en tête, je suis obligé de faire un strcpy pour renseigner tous les champs nécessaires (ici j'en ai mis qu'un). Et cela fonctionne comme cela. Sauf que du coup, j'ai créé un maillon intermédiaire et j'aurais aimé savoir comment me passer de ce maillon. J'ai vainement tenté de lui passer l'adresse directement mais ça merde.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int main(void){ pile *MaPile = NULL; charg_liste(&MaPile); ... }
Voici ce que j'ai tenté:
Et voilà ma fonction d'affichage de la liste:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void ajouter_tete(pile **MaPile, pile **m){ (*m)->prec = *MaPile; *MaPile = *m; }
Dans le cas du strcpy, ça me retourne exactement ce qu'il faut. Mais quand je passe l'adresse, j'ai une boucle infinie qui affiche le pseudo en tête de liste uniquement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void aff(pile **MaPile){ pile *p; p = *MaPile; while(p!=NULL){ printf("pseudo:\t%s\n",p->pseudo); p = p->prec; } }
Merci de votre aide et désolé si le post est un peu long, j'ai essayé d'être assez précis.
Dest.
Partager