Fichier de structures

boninou Messages postés 59 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 16 mai 2012 - 20 juin 2007 à 10:58
boninou Messages postés 59 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 16 mai 2012 - 20 juin 2007 à 13:25
Bonjour,
Voila mon petit souci : J'ai un fichier de structures qui contient des structures Candidat :

struct Candidat
{
    char prenom[25];
    char nom[25];
    char parti[20];
    int rep[11];
};

Le fichier candidats.dat contient 2 structures.
Ma procédure "compare" qui compare les réponses de l'opérateur à celles des candidats est la suivante :

void compare(int reponses[], int comp[])
{
    int i=0, j;
    struct Candidat c;
    FILE *r;
    r=fopen("candidats.dat","rb"); //On ouvre le fichier en mode lecture
    fseek(r,0,SEEK_SET);
    while(i<2) //Tant qu'on n'a pas comparer tous les candidats
    {
        fread(&c,sizeof(struct Candidat),1,r);
        for(j=0;j<11;j++)
        {
            if(c.rep[j]==reponses[j])
            {
                 comp[i]=comp[i]+1;
            }
        }
       i=i+1;
    }
    fclose(r);
}

Mon problème est que la premiere réponse de chaque candidat ne se trouve pas en c.rep[0] mais en c.rep[-3] !!!
Comment cela se fait-il ???

Merci de vos réponses

4 réponses

cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
20 juin 2007 à 11:50
Salut,

Ouvre ton fichier en hexa et verifie que la 1ere réponse se trouve bien à l'offset 0x46 et pas 0x43.

[mailto:D@runia D@runia]
0
boninou Messages postés 59 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 16 mai 2012
20 juin 2007 à 13:07
Merci pour ta réponse comment puis-je faire pour l'ouvrir en hexa ?
Peut-être est ce que le problème vient de la création de mon fichier !
Voici le code de création :

struct Candidat
{
    char prenom[25];
    char nom[25];
    char parti[10];
    int rep[11];
};

int main()
{
    FILE *pf;
    int j;
    pf=fopen("candidats.dat","ab");
    fseek(pf,0,SEEK_END);
    struct Candidat c;
    printf("Prenom : ");
    scanf("%s",c.prenom);
    printf("Nom : ");
    scanf("%s",c.nom);
    printf("Parti : ");
    scanf("%s",c.parti);
    for(j=0;j<11;j++)
    {
    printf("Reponse %d : ",j+1);
    scanf("%d",&c.rep[j]);
    }
    fwrite(&c,sizeof(struct Candidat),1,pf);
}
0
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
20 juin 2007 à 13:12
Utilise un éditeur hexadecimal, comme hexedit ou ultraedit.
Je pense aussi que le probleme vient de la creation du fichier.

[mailto:D@runia D@runia]
0
boninou Messages postés 59 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 16 mai 2012
20 juin 2007 à 13:25
J'utilise ultraedit mai je n'arrive pa a trouver l'offset 0x46.
Je peut t'envoyer mon fichier ?

A tu regarder mon code de création. Qu'est ce qui ne va pas ?

Merci
0