Bonjour a tous,
j'ai un tp sur les listes chainée mais je n'arrive pas a m'en sortir au niveau de l'affichage.
Voici mon code:
- include <stdio.h>
- include <stdlib.h>
- include "main.h"
void traiterPremierChoix(int premierChoix);
void traiterDeuxiemeChoix(int deuxiemeChoix);
ficheEtudiant* creerFicheEtudiant(ficheEtudiant *tete);
void afficherListe(ficheEtudiant *tete);
int main(void)
{
int premierChoix=0;
do
{
printf("1 : Creation d'une liste chainee \n");
printf("2 : Tri de la liste\n");
printf("3 : Affichage de la liste\n");
printf("4 : Recherche de la note d'un etudiant\n");
printf("5 : Ajout d'un nouvel element\n");
printf("6 : Copie de la liste dans un fichier\n");
printf("7 : Lecture du fichier\n");
printf("8 : Quitter\n");
printf("\t Faites votre choix: ");
scanf("%d",&premierChoix);
printf("\n");
}while(premierChoix<1 && premierChoix<9);
traiterPremierChoix(premierChoix);// on passe le choix de l'utilisateur et
return 0;
}
void traiterPremierChoix(int premierChoix)
{
int deuxiemeChoix=0;
switch(premierChoix)
{
case 1:
do
{
printf("1 : Par une insertion en tete de liste\n");
printf("2 : Par un ajout en queue de liste\n");
printf("\t Faites votre choix: ");
scanf("%d",&deuxiemeChoix);
}while(deuxiemeChoix<1 && deuxiemeChoix>2);
traiterDeuxiemeChoix(deuxiemeChoix);
}
}
void traiterDeuxiemeChoix(int deuxiemeChoix)
{
ficheEtudiant *tete=NULL;
switch(deuxiemeChoix)
{
case 1:
{
tete=creerFicheEtudiant(tete);
printf("la valeur de tete est : tete=%d",tete);
afficherListe(tete);
}
}
}
ficheEtudiant* creerFicheEtudiant(ficheEtudiant *tete)
{
char reponse='o';
do{
ficheEtudiant* etudiant;
etudiant = (ficheEtudiant *)malloc(sizeof(ficheEtudiant));
printf("Entrez le nom de l'etudiant: ");
scanf("%s",etudiant->nom);
printf("Entrez le prenom de l'etudiant: ");
scanf("%s",etudiant->prenom);
printf("Entrez la note de l'etudiant: ");
scanf("%lf",&etudiant->note);
etudiant->suivant=tete;
tete=etudiant;
printf("Voulez vous continuer?(o/n): ");
reponse=getche();
printf("\n");
}while(reponse!='n');
printf("la valeur de tete a la sorti est : tete=%d",tete);
}
void afficherListe(ficheEtudiant *tete)
{
ficheEtudiant *etudiant=tete;
while(etudiant->suivant!=NULL);
{
printf("%s %s %lf \n",etudiant->nom, etudiant->prenom, etudiant->note);
etudiant=etudiant->suivant;
}
}
ma structure est défini dans main.h
typedef struct ficheEtudiant ficheEtudiant;
struct ficheEtudiant
{
char nom[20];
char prenom[20];
double note;
ficheEtudiant *suivant; // contiendra l'adresse de la fiche suivante
};
Mon probleme est le suivant: Lorsque je test 'tete' juste avant de sortir de la fonction creerFicheEtudiant j'ai bien une adresse, mais quand je le teste une fois sorti 'tete' est NULL.
Je n'arrive pas a trouver pourquoi.