Erreur de segmentation
Harvard226
Messages postés
11
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
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.
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. |
A voir également:
- Erreur de segmentation
- Erreur 0x80070643 - Accueil - Windows
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
- Erreur de lecture reconnecté en 3s - Forum TV & Vidéo
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
- Code erreur f3500-31 ✓ - Forum Bbox Bouygues