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 : Sélectionner tout - Visualiser dans une fenêtre à part
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);
}