Urgent Probléme de passage de paramétre en C

Fermé
metnet - 27 janv. 2011 à 15:41
Bonjour,

j'ai un probléme pour creer une liste chainée qui reçoit comme argument un fichier FILE *fic; et doit retourner un pointeur tete qui sera le point d'entrer de la liste.
Je crée une liste pour pouvoir faire des modifs sur le fichier
voici le code

//La création du fichier avec les structures
#include<stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct { //Déclaration structure film
char titre[80];
int idfilm;
int idreal;
} film;

typedef struct { //Déclaration structure Réalisateur
char nom[40];
int idreal;
} personne;

typedef struct { //Déclaration structure acteur
char nomacteur[40];
int idacteur;
} acteur;

typedef struct liste* point; // Structure liste pour la liste doublementchaînée
struct liste {
int idl;
char titrel[80];
char *nomacteurl[40];
char nom[40];
point suiv;
point prec;
};

void ajoutfilm(){ // Fonction ajoutfilm pour la création des films, réalisateurs et acteurs associés
// dans 3 fichiers.
personne p;
film f;
acteur a;
f.idfilm=0;
f.idreal=0;
p.idreal=0;
int n,i;
a.idacteur=0;
point deb,tmp;
char rep;
int j=0;
FILE *fic3= NULL;
FILE *fic1= NULL;
FILE *fica= NULL;

fic1=fopen("fichier.txt","w"); //Ouverture de fic1 en mode ecriture pour sauvegarder des réalisateurs
fic3=fopen("fichier2.txt","w"); //Ouverture de fic3 en mode ecriture pour sauvegarder des films
fica=fopen("ficacteur.txt","w"); //Ouverture de fica en mode ecriture pour sauvegarder des acteurs

if (fic1 != NULL) // On test si les pointeurs fic1, fic3 et fica ne pointent pas sur NULL
if (fic3 != NULL)
if (fica != NULL)
{
do // On fait une boucle en demandant à l'utilisateur si il veut fair des ajouts ou pas
{
system("cls");
printf("Voulez vous ajouter un film ? Appuyez sur O pour Oui ou N pour Non\n");
printf("\n");
scanf("%s",&rep);
if((rep=='O')||(rep=='o')) // Si la réponse est Oui on fait l'ajout
{
system("cls"); // On efface l'écran pour le rendre lisible
printf("Donner le Titre du Film\n");
scanf("%s",&(f.titre));
f.idfilm=f.idfilm+1; // On incrémente l'id du film crée pour la traçabilité
f.idreal=f.idreal+1; // On incrémente l'id du réalisateur crée pour la traçabilité
fwrite(&f, sizeof(f), 1, fic3);
printf("Donner le Nom du Realisateur\n");
scanf("%s",&(p.nom));
p.idreal=p.idreal+1;
fwrite(&p, sizeof(p), 1, fic1);
printf("Combien d'Acteurs voulez vous jouter pour %s \n",f.titre);
scanf("%d",&n);
system("cls");
for(i=0; i<n; i++) // une boucle pour creer le nombre d'acteurs fourni par l'utilisateur
{
printf("Donner le Nom De l'Acteur\n");
scanf("%s",&(a.nomacteur));
a.idacteur=a.idacteur+1;
fwrite(&a, sizeof(a), 1, fica);
}
}
else if((rep=='N')||(rep=='n')) // Si il ne veut plus ajouter on arréte et on sort
{
system("cls");
printf("Merçi d'Appuyer sur une touche pour Quitter\n");
printf("\n");
}
else
printf("§§§ ATTENTION ERREUR §§§ \n"); // Si il a tappé autre chose on affiche Erreur

} while((rep =='O')||(rep =='o'));

getchar();
getchar();
fclose(fic1); // Fermeture des fichiers
fclose(fic3);
fclose(fica);
}

else
{
system("cls");
printf("Impossible d'ouvrir le fichier fichier.txt");
}

point creationliste(char fichier, char fichier, char fichier3) //création de la liste

{
FILE *fic1;
fic1=NULL;
fopen("fichier.txt","r");
if(fic1!=NULL)
{
while(!foef(fic1))
{
fread(&p,sizeof(int),1,fic1);
if(deb==NULL)
{
deb=malloc(sizeof(list));
deb.id=p.id;
deb.real=p.nom;
deb->prec=NULL;
deb->suiv=NULL;
tmp=deb;
}
else
{
pt=malloc(sizeof(list));
pt.id=p.id;
pt.real=p.nom;
pt->prec=tmp;
pt->suiv=NULL;
tmp=pt;
}
else
{

printf("Impossible d'ouvrir le fichier fichier.txt");
}
return(deb);
}


}