Bonsoir!
voila j'ai rélisé depuis plusieurs semaines un code en C++ consistant a créer une sorte d'annuaire d'entreprise permettant à l'utilisateur d'enregistrer les clients(avec nom,code,num,fax....) puis de les retrouver,supprimer,modifier.
Mais étant novice, je butte sur l'enregistrement et sauvegarde.
en effet, j'ai utilisais la fonction fopen(puis les commande r,w,r+,w+) mais a chaque fois que j'enregistre puis reouvre le programme, les données dans le fichier .text sont décalés "d'une unité". Ainsi quand je recherche a nouveau une fiche je ne trouve plus rien car tout a était chamboulé.
Je livre mon code en partie, si vous voulais bien m'aider et besoin de la suite dite le moi!
merci d'avance a tous.

Code:
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
 
#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
#include <string.h> 
 
 
typedef struct fiche { 
    char code[50]; 
    char nom[50]; 
    char prenom[25]; 
    char tel[25]; 
    char entreprise[25]; 
    char adresse[50]; 
    char email[50];
    char date[50];
    struct fiche* suivant; } fich; 
 
typedef struct { 
    fich * debut; 
    fich * fin; 
    int nbfiches; } liste; 
 
/*****************sous-programme d'initialisation**************/ 
 
liste * init(liste * pers) { 
    pers=(liste*)malloc(sizeof(liste)); 
    pers->debut=(fich*)malloc(sizeof(fich)); 
    pers->fin=(fich*)malloc(sizeof(fich)); 
    pers->nbfiches=0; 
    pers->fin->suivant=NULL; 
    pers->debut->suivant=pers->fin; 
    return (pers); 
} 
 
 
 
/************sous-programme de sauvegarde sur disque ************/ 
 
 
void sauver(liste*pers) 
{ 
    FILE*fp; 
    fich*tmp; 
    fp=fopen("annu.txt","w"); 
    tmp=(fich*)malloc(sizeof(fich)); 
    tmp=pers->debut->suivant; 
    fprintf(fp,"%d\n",pers->nbfiches); 
    while(tmp->suivant!=NULL) 
    { 
        fprintf(fp,"%s\n",tmp->nom); 
        fprintf(fp,"%s\n",tmp->prenom); 
        fprintf(fp,"%s\n",tmp->tel); 
        fprintf(fp,"%s\n",tmp->code); 
        fprintf(fp,"%s\n",tmp->entreprise); 
        fprintf(fp,"%s\n",tmp->adresse); 
        fprintf(fp,"%s\n",tmp->email); 
        fprintf(fp,"%s\n",tmp->date);
        tmp=tmp->suivant; 
    } 
    fprintf(fp,"%d\n",pers->nbfiches); 
    fclose(fp); 
} 
 
/************sous-programme de chargement sur disque ************/ 
 
void charger (liste* pers){ 
    fich* tmp; 
    FILE* fp; 
    int i,j,k; 
    fp=fopen("annu.txt","r"); 
    tmp=pers->debut; 
    k=pers->nbfiches; 
    fscanf(fp,"%d\n",&pers->nbfiches); 
    j=pers->nbfiches; 
    for(i=0;i<k;i++) tmp=tmp->suivant; 
    for(i=0;i<j;i++) { 
        fich * nouv; 
        nouv=(fich*)malloc(sizeof(fich)); 
        fgets(nouv->nom,50,fp); 
        fgets(nouv->prenom,50,fp); 
        fgets(nouv->code,25,fp); 
        fgets(nouv->entreprise,25,fp); 
        fgets(nouv->tel,25,fp); 
        fgets(nouv->adresse,50,fp); 
        fgets(nouv->email,50,fp); 
        fgets(nouv->date,50,fp);
        tmp->suivant=nouv; 
        tmp=nouv; 
    } 
    fclose(fp); 
    pers->nbfiches=(pers->nbfiches)+k; 
}