IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

chercher dans mon fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 9
    Par défaut chercher dans mon fichier
    J'ai un probleme avec mon fichier il ne trouve pas l'element que je veux qu'il trouve !!

    donc g une fonction qui enregistre les elements
    Ma structure
    struct hi chut[16];

    puis j'ouvre le fichier en WB(je dois travailler en binaire) pour ecraser si il y a deja des truc dans le fichier
    puis je fais sa pour entre les equipes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
          for(i=0;i<16;i++)
           {
              printf("equipe %d",i+1);
              scanf("%s",chut[i].equipe);
              fwrite(&chut[i],sizeof(chut),1,f);
            }
    je ferme le fichier


    Puis dans une autre fonction j'ouvre le meme fichier en A+B

    j'affiche

    le 16 equipe là aucun probleme.
    puis ensuite je veux retrouve la position d'une equipe en particulier
    donc je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    printf("\nequipe1 : ");
    scanf("%s",a);
     
                      fread(&chut[i],sizeof(chut),1,f);
                      while(!feof(f))
                      {
                         if(strcmpi(a,chut[i].equipe)==0)       
                             {
                             pos1=i;
                             fread(&chut[i],sizeof(chut),1,f);
                             }
                             i++;
                       }
    //donc si l'equipe est
    //dans le fichier je note la
    //position pour l'utiliser apres
    // pour ajouter des infos


    Mais il me mets toujours 0 , la valeur d'initialisation de pos1.
    Quel est le probleme??

    Merci d'avance pour la reponse

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Première question, qu'y a-t-il dans la structure hi ? A quoi ressemble le champ équipe ?

    Sinon, j'ai l'impression que tu mixes mode binaire et mode texte :
    Tes fichiers sont ouverts en mode binaire, mais les comparaison se font en mode texte : le problème peut venir de là...


    Poste un code minimal qui compile et reproduit le problème.


    Enfin, la fonction feof ne fait pas ce que tu pense : On ne lit pas un fichier comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FILE * f = fopen("toto", "r");
     
    while(!feof(f)) {
        fgetc(f);
    }
    Mais comme ça :
    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
    FILE * f = fopen("toto", "r");
    if(NULL == f) {
        perror("Erreur fichier");
    } else {
       int c = fgetc(f);
       while(EOF != c) {
          c = fgetc(f);
       } 
       if(feof(f)) {
           printf("Fin de fichier\n");
       }
       if(ferror(f)) {
           printf("Erreur pendant la lecture\n");
       }
        fclose(f);
    }

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 9
    Par défaut
    voila ma structure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct hi
    {char cat[30],equipe[30];
    int match_joue,gagne,perdu,nul,points;
    };
    //les int c pour faire un classement!! c pour cela qu'il me faut la position de l'equipe pour apres lui ajouter 3points en cas de victoire..........


    bha je fais comme cela pour le fichier j'ouvre avec fopen puis

    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
              if(f==NULL)
                  printf("impossible d'ouvrir le fichier");
               else
               {    printf("\nequipe1 : ");
                     scanf("%s",a);
     
                      fread(&chut[i],sizeof(chut),1,f);
                      while(!feof(f))
                      {
                      if(strcmpi(a,chut[i].equipe)==0)       
                       {
                        pos1=i; //mais ici il ne prends pas la valeur du i c toujours zero
                        fread(&chut[i],sizeof(chut),1,f);
                        }
                        i++;
                       }
         ....//reste des instrcutions
     
    fclose(f);
    }

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Remets tu bien i à zéro avant de t'en servir ?

    Sinon, voici une explication de ma remarque sur feof : http://www.developpez.net/forums/d74...ix/#post498219

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 9
    Par défaut
    Oui pour le i
    et surement que cela vient du feof parce que j'ai r'ajouté un printf pour voir si il rentre dans le if(strcmp) mais il rentre pas

    je dois mettre sa

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (fgets(&chut[i],sizeof(struct hi),f))
    a la place de

    Dis moi si je vois bien ce que c le feof
    Donc le programme regarde si l'equipe rentré correspond a une equipe de mon fichier et si il n'y a plus d'element ,il va jusqu'a la fin du fichier donc il s'arrete puisque je mets tant que different de fin de fichier je continue

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par rhcp88 Voir le message
    je dois mettre sa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (fgets(&chut[i],sizeof(struct hi),f))
    Non, il ne faut pas se servir de fgets pour lire du binaire, il faut utiliser fread à la place.

    Sinon, je pense avoir trouvé la source du Problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fwrite(&chut[i],sizeof(chut),1,f);
    fread(&chut[i],sizeof(chut),1,f);
    A la lecture et l'enregistrement tu donnes la taille de chut, alors qu'il faudrait donner la taille d'un élément de chut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fwrite(&chut[i],sizeof *chut,1,f);
    fread(&chut[i],sizeof *chut,1,f);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fwrite(&chut[i],sizeof chut[i],1,f);
    fread(&chut[i],sizeof chut[i],1,f);

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 9
    Par défaut
    J'ai essayer tes deux solutions mais toujours le meme resusltat

    et quand je veux revenir au debut du fichier avec rewind(f); le programme plante donc je ne vois vraiement plus comment faire!

Discussions similaires

  1. Réponses: 9
    Dernier message: 04/05/2006, 17h33
  2. Réponses: 7
    Dernier message: 25/01/2006, 21h37
  3. lecture d'éléments dans mon fichier
    Par gillou4 dans le forum C
    Réponses: 9
    Dernier message: 23/10/2005, 16h19
  4. Saut de ligne dans mon fichier?
    Par cchampion2fr dans le forum Access
    Réponses: 1
    Dernier message: 14/09/2005, 16h22
  5. __declspec(dllexport) dans mon fichier header mais...?
    Par Jasmine dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 03/03/2004, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo