- Remplacer le tableau statique par un tableau dynamique alloué avec
malloc/realloc - Implémenter le chargement et la sauvegarde des joueurs depuis/vers un fichier texte
- Vérifier la cohérence des modifications apportées avec les fonctionnalités précédentes
- Créer un menu interactif pour tester toutes les fonctionnalités (optionnel)
- Cours sur l’allocation dynamique (
malloc,realloc,free) - Documentation sur la gestion des fichiers en C (
fopen,fclose,fprintf,fscanf) - Documentation sur les pointeurs de pointeurs
Fichier à compléter :
src/
├── main.c # Optionnel : menu interactif
└── array-utils.c # À compléter : fonctions de manipulation du tableau dynamique
1 Contexte
Dans la Partie 1, vous avez utilisé un tableau statique avec une taille fixe (MAX_PLAYERS). Cette approche a des limites :
- Gaspillage de mémoire si on utilise peu de joueurs
- Impossible d’ajouter plus de joueurs que la capacité maximale
Dans cette partie, vous allez :
- Créer un tableau dynamique de taille fixe alloué avec
malloc - Implémenter le chargement et la sauvegarde des joueurs depuis/vers un fichier texte
- Créer un menu interactif pour tester toutes les fonctionnalités (optionnel)
2 Fonctions à implémenter
2.1 Création d’un tableau dynamique
Player** createPlayerArray(int size);Description :
Crée et initialise un tableau dynamique de size pointeurs vers Player où tous les éléments sont initialisés à NULL. Retourne un pointeur vers le tableau alloué ou NULL en cas d’échec.
2.2 Destruction du tableau dynamique
void destroyPlayerArray(Player** players, int size);Description :
Libère toute la mémoire allouée pour chaque joueur players[i] du tableau players puis le tableau players lui-même.
2.3 Chargement des joueurs depuis un fichier
Player** loadPlayers(const char* filename, int* numPlayers);Description :
Charge les joueurs depuis un fichier texte dont le chemin est indiqué par filename. Crée et renvoie un tableau dynamiquement alloué en fonction du nombre de joueurs lu dans le fichier. La fonction renvoie NULL en cas d’erreur.
Format du fichier :
3
ForkMaster 10 1200 5 3 2 0
SpoonyKnight 5 800 2 1 1 0
KnifeLord 15 1500 10 8 2 0
- Si
fopen()échoue, afficher un message d’erreur et retournerNULL - Si
createPlayerArray()échoue, fermer le fichier et retournerNULL - Si
createPlayer()échoue pour un joueur, libérer tout ce qui a été alloué avecdestroyPlayerArray(), fermer le fichier et retournerNULL
Les fichiers de données sont stockés dans le répertoire input/ à la racine du projet.
2.4 Sauvegarde des joueurs dans un fichier
void savePlayers(const char* filename, Player** players, int size);Description :
Sauvegarde tous les joueurs du tableau players de taille size dans un fichier texte dont le chemin est indiqué par filename. Le format doit être le même que celui utilisé pour le chargement.
- N’oubliez pas le caractère de fin de ligne
\naprès le nombre de joueurs - Vérifiez que
players[i]n’est pasNULLavant d’accéder à ses champs - Pensez à fermer le fichier après écriture
- La fonction ne retourne rien (
void), mais affiche un message d’erreur si l’ouverture échoue
3 Vérification de la cohérence avec les fonctionnalités précédentes
Afin de s’assurer que les modifications apportées pour utiliser un tableau dynamique n’ont pas introduit de régressions, il est important de vérifier la cohérence des fonctionnalités précédemment implémentées.
- Ajout de joueurs : Vérifiez que la fonction
addPlayerfonctionne correctement avec le tableau dynamique. Assurez-vous que les joueurs sont ajoutés correctement et que la taille du tableau est mise à jour si nécessaire. - Suppression de joueurs : Testez la fonction
removePlayerpour vous assurer qu’elle supprime correctement les joueurs du tableau dynamique et libère la mémoire associée. - Recherche de joueurs : Vérifiez que la fonction
searchPlayerByUsernamefonctionne comme prévu avec le tableau dynamique. - Tri des joueurs : Assurez-vous que la fonction
sortPlayersBySpicyIndextrie correctement les joueurs dans le tableau dynamique. - Affichage des joueurs : Testez la fonction
displayAllPlayerspour vérifier qu’elle affiche correctement les informations des joueurs dans le tableau dynamique.