Bonjour,
tout d'abord passons ton type en revue. J'imagine que tu cherches à faire une liste chaînée, non ? Dans ce cas ta structure devient :
1 2 3 4 5 6 7
| typedef struct _Acteurs
{
char nom[30];
char prenom[30];
char titre[120];
struct _Acteurs *suivant;
}Acteurs; |
Comme tu crées un nouveau type, il est conseillé de créer les fonctions qui vont manipuler ce type :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| //acteur_new est une fonction qui crée un nouveau maillon
// je pars du principe que si l'allocation mémoire échoue alors il y a un abort
// c'est un maillon qui n'est relié à rien
Acteurs *acteur_new(const char nom[], const char prenom[], const char titre[]);
// si on a aune fonction d'allocation alors on a une fonction de libération
void acteur_free(Acteurs *);
// ici tu ajoutes une flopée de fonctions qui vont bien
....
// on passe aux fonctions manipulant une liste
// je ne crée pas de type dédié
Acteurs *acteur_insert(Acteurs *head, Acteurs *new);
// à nouveau une flopée de fonctions pour la gestion des listes
.... |
Maintenant qu'on sait manipuler des objets de type Acteurs* et des liste d'Acteurs on passe à la lecture du fichier.
Il nous faut une fonction qui lise le fichier et en extrait les données, elle renvoie un booléen qui indique le succès
bool file_read_acteur_data(FILE * file, char nom[], char prenom[], char titre[]);
Avec toute ces fonctions il devient presque trivial d'implémenter ce que tu cherches :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| Acteurs *file_create_actor_list(const char *filename)
{
FILE *file=fopen(filename,"r");
if (file==NULL) {
perror("fopen");
return NULL;
}
char nom[30];
char prenom[30];
char titre[20];
Acteurs *list=NULL;
while (file_read_acteur_data(file, nom, prenom, titre)) {
Acteurs *new=acteur_new(nom, prenom, titre);
list=acteur_list_insert(list, new);
}
fclose(file);
return list;
} |
Tu as le squelette, reste à écrire le fond du code.
Partager