voila g deux fichier :
-un primaire
-une zone de debordement (pour la gestion de synonymes)
j'effectue sur c fiches une suppression logique qui fait disparaitre les fiches au listage..
pour la zone primaire je mets la clé a 0 et tout se passe bien
mais lorsque je supprime un primaire qui a des synonymes je dois rapatrier son premier synonyme a sa place une X celui ci supprimé logiquement...
je copie donc le contenu de son ynonyme a sa place et je mets la cle du syn qui est desormais en primaire a -1
mais la clé ne se met ^pas a -1
pourtant qd je fais un pas a pas avec des watchs la clé se met bien a -1 mais ds le listage elle est tjrs a sa valeur initilae et je ne vois pas pq
voici le code de ma suppression:
void supprimp (struct bibli vbib,int nbmaxfich,struct biblise vbibse,int nbmaxse)
{
FILE *pt,*ps;
int pad,pad1,pad2,k,flag=0;
char rep;
pad=recherche(vbib,nbmaxfich);
if (pad>=nbmaxfich+1)
{
pad=rechsec(vbibse,nbmaxse);
if (pad<nbmaxse+1)
{
printf ("\n\nVOULEZ VOUS VRAIMENT SUPPRIMER CETTE FICHE (o/n)" );
rep=getche();
if (rep=='o'
{
ps=fopen("filsec.dat","r+b" );
fseek(ps,(pad)*sizeof(vbibse),0);
fread(&vbibse,sizeof(vbibse),1,ps);
vbibse.num=-1;
fseek(ps,(pad)*sizeof(vbibse),0);
fwrite(&vbibse,sizeof(vbibse),1,ps);
clrscr();
printf ("\nCette fiche a ?t? supprim?e." );
getch();
}
else
{
clrscr();
printf ("\n\n\nSuppression annul?e." );
}
}
}
else
{
if (pad<nbmaxfich+1)
{
printf ("\n\nVOULEZ VOUS VRAIMENT SUPPRIMER CETTE FICHE (o/n)" );
rep=getche();
if (rep=='o'
{
pt=fopen("file.dat","r+b" );
ps=fopen("filsec.dat","r+b" );
fread(&vbibse,sizeof(vbibse),1,ps);
fseek(pt,(pad-1)*sizeof(vbib),0);
fread(&vbib,sizeof(vbib),1,pt);
k=0;
do
{
fseek(ps,(k-1)*sizeof(vbibse),0);
fread(&vbibse,sizeof(vbibse),1,ps);
pad1=(vbib.numero%1000)+1;
pad2=(vbibse.num%1000)+1;
if (pad1==pad2)
{
flag=1;
vbib.numero=vbibse.num;
vbibse.num=-1;
vbib.volume=vbibse.volu;
strcpy(vbib.titre,vbibse.titr);
strcpy(vbib.auteur,vbibse.aut);
strcpy(vbib.edition,vbibse.edit);
strcpy(vbib.date,vbibse.dat);
fseek(ps,(k-1)*sizeof(vbibse),0);
fwrite(&vbibse,sizeof(vbibse),1,ps);
fseek(pt,(pad-1)*sizeof(vbib),0);
fwrite(&vbib,sizeof(vbib),1,pt);
fclose(ps);
} k++;
}
while (k<=nbmaxse && flag==0);
if (k>=nbmaxse)
{
vbib.numero=0;
fseek(pt,(pad-1)*sizeof(vbib),0);
fwrite(&vbib,sizeof(vbib),1,pt);
fclose(pt);
}
clrscr();
printf ("\nCette fiche a ?t? supprim?e." );
getch();
}
else
{
clrscr();
printf ("\n\n\nSuppression annul?e." );
}
}
}
fclose(pt);
}
---------------
:sol: