bonjour
ci dessous, une fonction que j'ai faite pour mon projet. Cette fonction à pour role de suprimer un nom dans un fichier qui contient un ensemble de nom.
au début, une lecture de chaque ligne et la suppression de retour chariot " \n " (cahque ligne contien un seul nom)
- après je recopie tout les noms dans un tableau de chaine de caractère
- supprimer le nom voulu et le remplacer par "NULL"
- et a la fin je recopie les noms de tableau dans le fichier liste.
en compilant, le programme fonctionne bien avec un seul nom dans la liste, parcontre, avec plus de 3 noms, cette fonction ne fonctionne pas bien, et elle supprime tout les noms sans décrementer le nombre nb_adher (sachant que cette fonction est faite pour supprimer un seul nom a chaque appel, et que dans la liste y a pas de nom identique)
Ma question:
Est ce que vous pouvez vérifier cette fonction, et de me faire toute les remarque en vu de régler mon problème et d'améliorer cette fonction.
//////la fonction:
//Fonctioin qui supprime un adhérent
int supprimer(char *nom_sup)
{
char nom[20];
FILE *fich;
FILE *liste;
char *nomListe[nb_adher];
int i, length;
fich = fopen("liste_adher", "r");
//copie de contenu de fichier liste dans le tableau de chaine de caractères
for (i=0; i<nb_adher; i++) //nb_adher: nombre d'adhérent
{
fgets(nom,20,fich); // Lecture d'un nom dans le fichier liste
remove_cr(nom); // Supprimer le retour chariot "\n"
length = strlen(nom);
nomListe[i]=malloc(length); //nomListe pointe sur un tableau de type char dont
//la taille correspond au nom lu ds le fichier
strcpy(nomListe[i], nom); //copie le contenu de nom ds nomListe
}
fclose(fich);
//supprimer un nom
for (i=0; i<nb_adher; i++)
{
if (strcmp(nomListe[i],nom_sup)==0)
{
nomListe[i]=NULL;
remove(nom_sup); //supprimer la fiche d el'adhérent
printf("\nAdherent supprimé\n");
nb_adher--; //mise à jour de nombre d'adhérent
}
}
// Mise à jour de la liste des adhérents après la suppression
if ((liste = fopen("liste_adher", "w")) == NULL)
{
fprintf(stdout, "Erreur Ã* l'ouverture du fichier en mode w.\n");
exit(0);
}
else
{
for (i=0; i<nb_adher; i++)
{
if (nomListe[i]!=NULL)
fprintf(liste, "%s\n", (nomListe[i])); //Ecriture de nom dans la liste
fclose(liste); // Fermeture de fichier
}
}
return 1;
}
-----