Bonjour, j'ai un souci avec mon programme que je n'arrive pas à comprendre.
Ma fonction d'affichage ne marche pas correctement, il m'affiche non seulement pas tous les éléments qui dans ma liste, mais aussi elle ne m'affiche le dernier élément n-1 fois.
Exemple si je saisie trois chaines, la fonction m'affiche la dernière 2 fois. Je vous mets tout le code.
fichier.h
en plus le fichier principal
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 struct cellule { char *chaine; struct cellule *suivant; }; typedef struct cellule cellule; struct liste { cellule * debut; cellule *fin; int taille; }; typedef struct liste liste;
Merci d'avance pour vos aides.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "exo5.h" #define MAX 1000 //fonction 'affichage void affiche(liste *list){ cellule * tmp=list->debut; while(tmp->suivant!=NULL) { printf("%s ",tmp->chaine); tmp->suivant=tmp->suivant->suivant; } printf("\n");0 } //fonction d'initialisation void initialiser(liste * l) { l->debut=NULL; l->fin=NULL; l->taille=0; } //le main int main() { unsigned int taille; printf("saisir la taille du tableau: \n"); scanf("%u",&taille); char buffer[MAX]; cellule * tmp; //creation de la liste liste *list = malloc(sizeof(liste)); initialiser(list); for(int i=0; i<taille;i++) { printf("Saisir mois %d\n",i+1); scanf("%s", buffer); cellule *c= malloc(sizeof(cellule));//creation de la cellule c->chaine = (char*) malloc(strlen(buffer)*sizeof(char)+1);//allocation du tableau de char strcpy(c->chaine,buffer);//affectation de la chaine au champ chain de cellule if(list->debut==NULL) { list->debut=c; list->fin=c; } else{ tmp=list->debut; list->debut=c; c->suivant=tmp; } list->taille++; } affiche(list); }
Partager