Rechercher : dans
Par :

Problème dans une fonction en Langage C

Dernière réponse le 24 mai 2008 à 21:32:04 Hamid, le 4 mai 2007 à 00:06:12 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Problème dans une fonction en Langage C » dans :
Langage C - Les types de données Voir Les types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Introduction au langage C VoirPetite histoire du C Le langage C a été mis au point par D.Ritchie et B.W.Kernighan au début des années 70. Leur but était de permettre de développer un langage qui permettrait d'obtenir un système d'exploitation de type UNIX portable. D.Ritchie...

1

Stupeflip, le 4 mai 2007 à 10:17:08

Salut,

Essaye en remplaçant

nomListe[i]=malloc(length);
par
nomListe[i]=(char *)malloc(length);
Qui n'a rien n'a rien (Proverbe Norvillois)

Répondre à Stupeflip

2

Sylvanus, le 4 mai 2007 à 16:18:01

Je vois quelques incohérences :

- Tu te fis d'avantage à ta variable globale nb_Adher qu'au fichier ?
: for (i=0; i<nb_adher; i++)
Tu risque d'avoir des plantage en cas de fichier trop court.
Un bon while(!feof(fic)) me semble plus sur, avec un compte complet des adher ( strcpy(nomListe[adher++], nom); )

Je vois aussi un gros problème dans ton parcours pour la suppression :
tu fait nb_Adher-- hors la boucle dans laquelle tu es pour faire le parcours de ton tableau s'arrete à i< nb_adher

Tu ne parcours donc pas tout ton tableau : tu ratte n éléments, n étant égal au nombre d'éléments supprimés ( a moins que ta fonction de suppression " remove(nom_sup); " ne décale tout les éléments.

Je pense que tu doit avoir une variable renseignée au moment de la lecture du fichier pour te donner le nombre max de ton tableau (Nb_Max), parcourir i < nb_Max, faire tes suppressions et mettre NULL là où tu supprime. Enfin pour la réécriture : parcourir i<NB_Max, et si !=NULL ecrire et fair Nb_Adhérent++, pour savoir à la fin combien tu a d'adhérents.

S

Répondre à Sylvanus

3

khalmen22, le 23 mai 2008 à 13:47:22

Je suis nouveau dans langage C et j'ai un exercice un peu difficile voulez-vous m'aider pliiiiiize
voila l'exrcice:
ecrire un progarmme qui affiche les termes de la suite suivante:
x0=8
Xn+1=(3*Xn+5)%17
1-tester votre progarmme.les 4 premoers termes sont 12.7.9.15.
2-modifier votre progarmme pour qu'il puisse sffiche les N premiers termes de la suite,N est un entier saisit au clavier.
3-déterminer la plus petite et la plus grand valeur de la suite ainsi que leurs indices.
4-détermine la moyenne des N premires de la suite.
et merci j'attend vous réponce et merci.

Répondre à khalmen22

4

 khalmen22, le 24 mai 2008 à 21:32:04

Ou est vous j'attend vous réponce a ce exe.

Répondre à khalmen22