C suppression qui merde

C suppression qui merde - C++ - Programmation

Marsh Posté le 23-04-2002 à 21:11:02    

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:
Reply

Marsh Posté le 23-04-2002 à 21:11:02   

Reply

Marsh Posté le 24-04-2002 à 10:22:54    

Morcèle et commente ton code stp, crée des fonctions et procédures "statiques" de quelques lignes seulement qui par exemple contiennent les expressions résultats que tu as après chaque if et chaque else. Comme ça là c'est totalement illisible et on ne peut pas t'aider.

Reply

Marsh Posté le 24-04-2002 à 13:39:13    

Peux-tu synthetiser ton probleme ?
Donne seulement la portion de code incriminee et dit ce qui va pas ...
La cle se met a -1 mais dans le listage elle ne se met pas a -1 ...
c'est quoi le listage :??:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed