RDV+DIAL chat illimit� dans ta r�g!
no save
Assistance
Achat
News

Forum | programmation
Problème dans une fonction en Langage C
Hamid, le ven. 04 mai 2007 à 00:06:12
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;
} Configuration: Windows Vista
Internet Explorer 7.0


Stupeflip
mai 07
Suivant
REPONSES
Stupeflip
mai 07
Sylvanus
mai 07
khalmen22
mai 08
khalmen22
mai 08
Version Web
Réalisé par RedShift
no save