Modification d'un enregistrement dans un fichier
la question est comment modifier un numéro enregistré dans un fichier, cad comment peu on accéder à ce numéro & le modifier ?
ce progrmmae ci dessous, me permet de créer un fichier, d'enregistree des donnée d'un abonné dans ce fichier, puis il faut accéder à une donnée ( numéro ) pour l'incrémenter :
en utilise "fseek (fichier,0,1);" pour l'acces
et pour modifier le numéro jai utilisé ce ci :
"fread (&a.num,sizeof(abonne),1,fichier);
a.num ++ ;
fwrite(&a,sizeof(abonne),1,fichier);"
est ce que c'est correcte d'utiliser ces instructions pour réaliser l'acces puis la modification ?
ce programme ci dessous est compilé, mais il se plante dans l'exécution, c'est quoi le problème ?
(merci de m'aidez à résoudre ce pb)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| # include <stdio.h>
# include <string.h>
# include <conio.h>
# include <stdlib.h>
typedef struct
{
char nom [20];
char adresse [20];
int nbpassage; /* pas encore payé */
int num;
}abonne;
void creation ( abonne x, FILE *f)
{
int i=1;
char c;
do
{
printf("donner le nom de %d eme abonnee :\n",i);
scanf("%s",x.nom);
printf("donner l'adresse de l'abonnee:\n");
scanf("%s",x.adresse);
printf("donner le nombre de passage non paye de l'abonnee:\n");
scanf("%d",&x.nbpassage);
printf("donner le numero de l'abonne dans le fichier \n");
scanf("%d",&x.num);
fwrite(&x,sizeof(abonne),1,f);
i++;
printf("voulez vous saisir un autre abonne o/n:\n");
c=getch();
}while(c=='o'||c=='O');
}
int main ()
{
FILE *fichier;
abonne a;
int p ;
fichier = fopen("c:/fichier.txt","w+");
if ( fichier = NULL )
{
printf("fichier inexitant !");
exit(1);
}
else
{
creation(a,fichier);
}
/* Modification de nombre de passage */
printf("tapez le numéro d'abonné pour modifier: ");
scanf("%d",&p);
fseek (fichier,0,1);
fread (&a.num,sizeof(abonne),1,fichier);
a.num ++ ;
fwrite(&a,sizeof(abonne),1,fichier);
fclose(fichier);
} |