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 :
Les classes en langage C++ Voir La notion d'objet Le langage C est un langage procédural, c'est-à-dire que c'est un langage permettant de définir des données grâce à des variables, et des traitements grâce aux fonctions. L'apport principal du langage C++ par rapport au...
Les fonctions en C++ : surcharge et paramètres par défaut. VoirLes fonctions en C++ : surcharge et paramètres par défaut. 1. La surcharge de fonctions et méthodes de classes, dont le constructeur 2. Utilisation des paramètres par défaut En C++, une même fonction ou méthode de classe peut être...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme 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...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...
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...

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