Supprimer dans un fichier

juju0612 Messages postés 19 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 24 août 2008 - 20 août 2008 à 20:59
juju0612 Messages postés 19 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 24 août 2008 - 23 août 2008 à 11:24
donc voila mon programme fais une gestion d'un club de foot!!donc ici c pour supprimer des joueurs.
tout marche sauf que j'ai un probleme avec ma fonction supprimer
voila donc ma fonction doit demander quel nom doit etre supprimer et le trouver (sa sa marche)puis je demande si c la bonne personne et la si je tape O ou o le nom ainsi que toute ses infos doivent se supprimer(mais sa sa marche pas)

est ce que vous pouvez m'aider? merci d'avance de prendre quelque minute pour moi et mon programme.
voila ma fonction.

 void supression()
{



    titre();
  printf("\n suppression\n ");
  struct enreg fiche;
  struct tmp TMP;
  FILE *f;
  FILE *tp;
  char n[30],rep;
  printf("\nNom a supprimer :");
  fflush(stdin);
  gets(n);
  strlwr(n);
  f=fopen("joueurs.dat","r+b");
  tp=fopen("temp.dat","a+b");



   if(f!=NULL)
  { fread(&fiche,sizeof(fiche),1,f);
    { if(strcmpi(fiche.nom,n)==0)
  { printf("\nnom : %s",fiche.nom);
      printf("\nprenom : %s",fiche.prenom);
      printf("\nposte : %s",fiche.poste);
      printf("\nEst-ce la personne que vous cherchez ?");
      scanf(" %c",&rep);
      if(rep=='O'||rep=='o')
        while(!feof(f))
      {
          strcpy(TMP.categorie,fiche.categorie);
          strcpy(TMP.nom,fiche.nom);
          strcpy(TMP.prenom,fiche.prenom);
          strcpy(TMP.datenais,fiche.datenais);
          strcpy(TMP.pied,fiche.pied);
          strcpy(TMP.numero,fiche.numero);
          strcpy(TMP.rue,fiche.rue);
          strcpy(TMP.numeromaison,fiche.numeromaison);
          strcpy(TMP.codepostal,fiche.codepostal);
          strcpy(TMP.poste,fiche.poste);



          fwrite(&TMP,sizeof(TMP),1,tp);
       }
          fread(&fiche,sizeof(fiche),1,f);
       fseek(f,-1L*sizeof(fiche),SEEK_CUR);
       fwrite(&fiche,sizeof(fiche),1,f);
      } //fin de test si bonne personne



       }



 }
   fclose(f);
   fclose(tp);



  if(!feof(f))
  {
   remove("joueurs.dat");
   rename("temp.dat","joueurs.dat");
  }
 }

6 réponses

juju0612 Messages postés 19 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 24 août 2008 1
23 août 2008 à 11:24
bonjour!!
bon ben deso encore mais perso ne sais ressoudre mon probleme

je vois tout plein de personne passer mais personne ne poste.
et une reponse pourrai mettre trés utile.

SVP donc ma fonction supprimer doit demander un nom le trouver et puis copie tout sauf se nom

merci d'avance
1
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
21 août 2008 à 10:04
Si ton code est complet, il est bizarre, tu n'as pas de boucle while pour rechercher la personne en question.

Ton 'if' suivi de 'while' sans accolade dans les 2 me parait dangeureux, assure le coup en mettant les accolades.

A la fin fread fseek et fwrite servent à quoi ? tu passes par un fichier temporaire, donc quel est l'intéret de modifier le fichier d'origine ?
0
juju0612 Messages postés 19 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 24 août 2008 1
21 août 2008 à 11:26
donc voila merci de ton aide j'ai mis une boucle while j'ai mis les acolades et supprimer fseek et fxrite à l fin. mais cela donne le même resusltat.et stoppe apres le if O ||o   .Et je ne vois se qu'il cloque!. quand je tape sur O||o il arrete sa recherche de nom et jusqu'a la fin du fichier vas copier dans TMP .
qu'est ce qu'il ne va pas ?
merci encore fregolo52

void supression()
{


    titre();
  printf("\n suppression\n ");
  struct enreg fiche;
  struct tmp TMP;
  FILE *f;
  FILE *tp;
  int sw=0;
  char n[30],rep;
  printf("\nNom a supprimer :");
  fflush(stdin);
  gets(n);
  strlwr(n);
  f=fopen("joueurs.dat","r+b");
  tp=fopen("temp.dat","a+b");


  if (f==NULL)
    printf("le fichier n'existe pas");
  else
  { fread(&fiche,sizeof(fiche),1,f);
     while(!feof(f)&&(sw==0))
      { if(strcmpi(fiche.nom,n)==0)
   { printf("\nnom : %s",fiche.nom);
       printf("\nprenom : %s",fiche.prenom);
       printf("\nposte : %s",fiche.poste);
       printf("\nEst-ce la personne que vous cherchez ?");
       scanf(" %c",&rep);
       if(rep=='O'||rep=='o')
         {sw=1;
          while(!feof(f))
         {
            strcpy(TMP.categorie,fiche.categorie);
            strcpy(TMP.nom,fiche.nom);
            strcpy(TMP.prenom,fiche.prenom);
            strcpy(TMP.datenais,fiche.datenais);
            strcpy(TMP.pied,fiche.pied);
            strcpy(TMP.numero,fiche.numero);
            strcpy(TMP.rue,fiche.rue);
            strcpy(TMP.numeromaison,fiche.numeromaison);
            strcpy(TMP.codepostal,fiche.codepostal);
            strcpy(TMP.poste,fiche.poste);


            fwrite(&TMP,sizeof(TMP),1,tp);
            }
           fread(&fiche,sizeof(fiche),1,f);


       } //fin de test si bonne personne
      }
     }
  }
   fclose(f);
   fclose(tp);


  if(!feof(f))
  {
   remove("joueurs.dat");
   rename("temp.dat","joueurs.dat");
  }
 }
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
21 août 2008 à 13:06
ton "bug" c'est que si la réponse est 'O' ou 'o' tu écrits dans TMP, alors qu'il ne faut pas !!


Fait un fread juste apres sw=1; pour passer direct au suivant.


De plus dans ton code, tu supprimes toutes les personnes avant le nom à supprimer vu que tu sauvegardes dans TMP qu'a partir du nom recherché.




tu devrais faire :


- ouverture des 2 fichier
fread fichier source
while !feof


  test du nom
  si c'est pas celui qu'on veut
    écrire dans le fichier TMP les donnees
    fread source
  sinon (c'est la personne a supprimer)
    fread fichier source (pour passer tout de suite au suivant)
    tu fais ton while pour tout copier dans TMP
    break (pour sortir du while principal)
  fin si
fin while feof
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
juju0612 Messages postés 19 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 24 août 2008 1
21 août 2008 à 14:56
lorsque tu dit

test du nom
  si c'est pas celui qu'on veut
    écrire dans le fichier TMP les donnees
    fread source

le test c le IF
je reponds non a la question
ecrire comment avec fwrite??
fread(&fiche,sizeof(fiche),1,f);

break (pour sortir du while principal)

le break je le fais comment un simple acolades suffit non?

merci encore
0
juju0612 Messages postés 19 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 24 août 2008 1
22 août 2008 à 11:44
deso pour se UP mais là je galére

j'ai reflechie et je dois copier tout se qu'il y a devant le nom et apres le nom!!!

mais c sa que je sais pas faire!!

là je ne copie que se qui a apres seulement(et encore c bug apres la question)

merci a++
0
Rejoignez-nous