Erreur de segmentation

Harvard226 6 Messages postés vendredi 12 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 12 janv. 2018 à 22:35 - Dernière réponse : Whismeril 10783 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 janvier 2018 Dernière intervention
- 13 janv. 2018 à 20:58
Bonjour.
J'ai un problème avec le programme ci que je suis entrain d'écrire. Le debugger m'indique une erreur de segmentation. Mais je ne comprends pas pourquoi !
En particulier quand j'appelle la fonction ajouter_classe().
Merci.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//renseignements sur les classes
struct classe
{
int num;
char nom[50];
int effec;
};
struct classe classes;

//fonction de recherche classe
int recherche_classe(int code)
{

FILE*classe ;
classe = fopen("classes.g11", "r");
if(classe !=NULL)
{
do
{
fscanf(classe,"%d ;%s ;%ld\n",&classes.num,&classes.nom,&classes.effec);
fflush(stdin);
if(classes.num== code)
{
fclose(classe);
return 1; 
}
}while(!feof(classe));
fclose(classe);
return 0;
}
}


//ajouter une classe
void ajouter_classe()
{
FILE*classe;
int code;
/*char c;
c=';';*/
classe=fopen("classes.g11","a");
printf("\nentrez l'identifiant de la classe: ");
scanf("%d",&code);
fflush(stdin);

while(recherche_classe(code)==1)
{
printf("\ncette classe existe deja\n");
printf("entrer un nouvel identifiant");
scanf("%d",&code);
}
if(classe != NULL)
{
classes.num=code;
printf("%d\n",classes.num);
printf("\nentrer le nom de la classe: ");
//gets(classes.nom);
scanf("%s",classes.nom);
fflush(stdin);
printf("%s\n",classes.nom);
printf("\nentrer l'effectif de la classe:");
scanf("%d",classes.effec);
printf("%d\n",classes.effec);
fflush(stdin);

fprintf(classe,"%d ;%s ;%d\n",classes.num,classes.nom,classes.effec);
fflush(stdin);

fclose(classe);
}
}

//afficher la liste des classes
void affiche_classe()
{
FILE*classe =fopen("classes.g11", "r");
printf("la liste des classes est :\n\n");
printf("Code de la classe \t; nom de la classe\t; effectif de la classe\n");
if(classe!=NULL)
{
do
{
fscanf(classe,"%d ;%s ;%d\n",&classes.num,&classes.nom,&classes.effec);
fflush(stdin);
printf("%d\t ;%s\t ;%d\n",classes.num,classes.nom,classes.effec);
}
while (!feof(classe));
fclose(classe);
}
}


int main()
{
int choix;
char T;
do
{
printf("entrer 1 pour ajouter une classe\n");
printf("entrer 2 pour afficher la liste des classes\n");
printf("entrez votre choix: ");
scanf("%d",&choix);
while(choix>=1 && choix<=2)
{
switch(choix)
{
case 1:ajouter_classe();
break;
case 2:affiche_classe();
break;
}
}

printf("\nvoulez vous continuer O/N");
scanf("%s",&T);
fflush(stdin);
}
while(T=='o' ||T=='O');}


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
Afficher la suite 

1 réponse

Répondre au sujet
Whismeril 10783 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 janvier 2018 Dernière intervention - 13 janv. 2018 à 20:58
Commenter la réponse de Whismeril