当我尝试用数组填充它时,我的二进制文件始终为空

问题描述

typedef struct equipement_agricole{
char type[20];
char marque[20];
char modele[20];
char numero_serie[30];
char panne[20];
char status[20];
int nb_status;
int nb_panne;
}equipement_agricole;
typedef struct eq_util{
    char numero_s[30];
    char type_u[20];
    char marque_u[20];
    char modele_u[20];
    int nb_util;
    int ordre;
}eq_util;
typedef struct verif{
    char id[30];
    int nb;
}verif

void equipement_plus_util()
{
    FILE *f;
    FILE *g;
    int i=0;
    int taille=0;
    f=fopen("equipement.bin","rb");
    g=fopen("equipement_util.bin","wb");
    equipement_agricole E;
    eq_util U;
    while(fread(&E,sizeof(equipement_agricole),1,f)!=0)
    {
        taille+=1;
    }
    verif tab1[taille];
    while(fread(&E,f)!=0)
    {
        strcpy(tab1[i].id,E.numero_serie); 
        tab1[i].nb=E.nb_status;
          i++;
    }
    int j,k;
    verif T;
    for(j=0;j<taille-1;j++)
    {
        for(k=j+1;k<taille;k++)
        {
            if(tab1[j].nb<tab1[k].nb)
            {
                strcpy(T.id,tab1[j].id);
                T.nb=tab1[j].nb;
                strcpy(tab1[j].id,tab1[k].id);
                tab1[j].nb=tab1[k].nb;
                strcpy(tab1[k].id,T.id);
                tab1[k].nb=T.nb;
            }
        }
    }
    int a; 
    for(a=0;a<taille;a++)
    {
        while(fread(&E,f)!=0)
        {
            if(strcmp(tab1[a].id,E.numero_serie)==0)
            {
                strcpy(U.marque_u,E.marque);
                strcpy(U.modele_u,E.modele);
                strcpy(U.numero_s,E.numero_serie);
                strcpy(U.type_u,E.type);
                U.nb_util=E.nb_status;
                U.ordre=a+1;
                fwrite(&U,sizeof(eq_util),g);
            }
        }
    }
  fclose(f);
  fclose(g);
  
}

嗨,伙计们,我需要你们的帮助,我被困在这个问题上 2 天了,我找不到解决方案,所以我的问题是 在我从 equipement.bin bianry 文件获取必要的信息并将其放入一个数组之后,然后我对该数组进行排序之后,我将该数组放入了 equipement_util.bin 中,但我总是发现它是总是空的我尝试了我所知道的每一种薄,谢谢

解决方法

关于:

while(fread(&E,sizeof(equipement_agricole),1,f)!=0)
{
    taille+=1;
}
verif tab1[taille];
while(fread(&E,f)!=0)

当第一个 'while()' 循环退出时,'文件指针' 将位于文件末尾,因此第二个 while() 循环将立即退出。

要解决此问题:

在第一个 while() 循环退出后,将“文件指针”重置为文件的开头。建议:

rewind( f );

以上将导致文件中的数据被设置到数组tab1[]

可能还有其他问题,但是上述更正将使您的代码朝着正确的方向开始