Erreur de segmentation .Je débute avec les fonctions de lecture et d'ecriture dans les fichiers en c

Salut, je débute avec les fonctions de lecture et d’ecriture dans les fichiers en c.
Et donc voici qu’a l’execution de mon programme suivant, je recois comme erreure “Erreur de segmentation” mais je ne retrouve pas l’erreur. J’ai besoin de votre aide sur ce coup là!

#include <stdio.h>
#include <stdlib.h>
typedef struct SAdherent {
int adh_Index;
char adh_Nom[100];
char adh_Prenom[100];
};
struct SAdherent Adherent;

int rech(int Numrech)
{
FILE *F;//Création du pointeur en memoire sur F
F=fopen(“Adherents.txt”,“r”);
do
{
fscanf(F," %d ; %s ; %s ",&Adherent.adh_Index, Adherent.adh_Nom, Adherent.adh_Prenom);
if(Adherent.adh_Index == Numrech)
{
fclose(F);//Fermeture du canal vers le fichier
return 1; //Objet trouvé
}
}
while(!feof(F));
fclose(F);
return -1;
}

/----Procédure d’ajout-----/

void AjouterAdherent()
{
int Num;
FILE*F;
F=fopen(“Adherent.txt”,“a”);
printf("\n Entrez le numero du nouvel adherent: “);
scanf(”%d", &Num);
printf("\n %d",Num);
fflush(stdin);
if(rech(Num) == -1)
{
Adherent.adh_Index = Num;
printf("\n Entrez le nom :");
fgets(Adherent.adh_Nom, 100, stdin);
fflush(stdin);
printf("\n Entrez le Prenom :");
fflush(stdin);
fgets(Adherent.adh_Prenom, 100, stdin);
fflush(stdin);
fprintf(F,"%d ; %s ; %s\n",Adherent.adh_Index,Adherent.adh_Nom,Adherent.adh_Prenom);
fflush(stdin);//Liberation de la memoire

}
else
{
printf("\n Cet adherent existe deja.");
}
fclose(F);
}

int main()
{
AjouterAdherent();
}

Merci d’avance…

Bonsoir,

Pourriez-vous ré-envoyer votre code avec un balisage correct ?

1 Une première ligne ne contenant que trois caractères backticks (AltGr+7)
2 Le corps du code

int main()
{
AjouterAdherent();
}
3 Une ligne de balisage de fin comme la ligne 1

#include <stdio.h>
....
int main()
{
AjouterAdherent();
}

Cordialement,
Regards,
Mit freundlichen Grüssen,
مع تحياتي الخالصة

F. Petitjean
Celui qui, parti de rien, n’est arrivé nulle part n’a de merci à dire à personne !!
Pierre Dac

Très rapidement, car le code n’est pas indenté, et donc pas lisible…

le fichier Adherent.txt semble être ouvert 2 fois à même temps. une fois en écriture, une fois en lecture…
Pourquoi ouvrir le fichier en ‘append’ au début du programme, plutôt qu’au moment où l’on doit écrire dans le fichier ?

Il vaut mieux éviter les variables globales comme ‘Adherent’. Si ce programme grossi, y a de fortes chances de lire ou modifier cette variables sans être certain de ce qu’elle contient.

C’est presque ça !

En fait, le programme commence par ouvrir un fichier Adherent.txt en mode append. Le fichier est donc créé s’il n’existait pas auparavant.
Ensuite, le programme tente d’ouvrir en lecture seule un fichier Adherents.txt . Avec un S. fopen() renvoie la valeur null et comme il n’y a pas de vérification, patatra !

PS - Les profs en ISN, ils baissent la note d’un élève qui utilise scanf() , j’espère !


AnonymousCoward