[C] Liste chainée

Résolu/Fermé
Silver53 - 6 avril 2008 à 02:07
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 6 avril 2008 à 12:00
Bonjour,
un petit souci avec ma liste chainée, voici mon code :


int load(contact *Debut,contact *Fin)
{
FILE *Contact = NULL;
char NOM[TAILLE_MAX] = "";
char PRENOM[TAILLE_MAX] = "";
char NUMERO[TAILLE_MAX] = "";
char EMAIL[TAILLE_MAX] = "";
int compteur=1;
contact* pcourant=Debut;

system("cls");
Contact = fopen("Contact.txt", "r");

if(Contact!=NULL)
{
contact *Debut = (contact*)malloc(sizeof(contact));
fscanf(Contact, "%s %s %s %s",Debut->nom,Debut->prenom,Debut->numero,Debut->email);
printf("%s",Debut->nom); //LA CA MARCHE

while (!feof(Contact))
{
contact *Nouveau = (contact*)malloc(sizeof(contact));
if(compteur==1)
{
Debut->suivant=Nouveau;
}
pcourant=Nouveau;
fscanf(Contact, "%s %s %s %s", Nouveau->nom,
Nouveau->prenom,Nouveau->numero,Nouveau->email);

Nouveau->suivant =Fin;
Fin=Nouveau;
pcourant=pcourant->suivant;
compteur++;
}

Fin->suivant=Debut;
printf("%s",Fin->nom);
printf("%s",Debut->nom); // LA CA MARCHE AUSSI

} // ON SORT DU IF
fclose(Contact);
printf("%s",Debut->nom); // ET LA CA MARCHE PLUS
}


Donc voilà quand il s'agit d'afficher ma liste chainée, il m'affiche <null> quand je suis sorti du if, où est mon erreur?

merci

2 réponses

mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
6 avril 2008 à 05:08
tu as déclaré Debut comme un contact * et tu le fais pointé sur nom qui est un char * , Debut ne serait pas plutot un char ** ?
0
En fait contact est une structure :

typedef struct contact{
char nom[30];
char prenom[30];
char numero[30];
char email[30];
struct contact *suivant;
}contact;

tout marche à merveille sauf qu'une fois sorti de la fonction, lorsque j'affiche Debut->nom il m'ecrit <null>. Je pense qu'il doit vidé le maillon Debut de ma liste chainée mais je ne vois pas où?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
6 avril 2008 à 11:24
Salut,

essaie pour voir de faire la déclaration
contact *Debut = (contact*)malloc(sizeof(contact));
à l'exterieur de if
0
oui c'est ce que j'ai fait : j'ai supprimé le if et là je ne peux plus compiler : error C2082: redefinition of formal parameter 'Debut'
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > Silver53
6 avril 2008 à 11:47
c'est normal
tu as déjà ici int load(contact *Debut,contact *Fin)

mets Debut2 ou autre chose
0
Silver53 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
6 avril 2008 à 11:52
merci c'était bien ça :)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > Silver53
6 avril 2008 à 12:00
de rien ;-)
je mets en résolu
0