Affichage liste chaînée - éléments manquants
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
Code:
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; |
en plus le fichier principal
Code:
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);
} |
Merci d'avance pour vos aides.