当我尝试用数组填充时,我的二进制文件总是空的
my binary file is always empty when i try to fill it with an array
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,sizeof(equipement_agricole),1,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,sizeof(equipement_agricole),1,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),1,g);
}
}
}
fclose(f);
fclose(g);
}
大家好,我需要你的帮助,我已经被困在这个问题上 2 天了,我找不到解决方案,所以我的问题是
在我从 equipement.bin
二进制文件中获取必要的信息并将其放入一个数组中之后,我对该数组进行了排序,然后我将数组放在 equipement_util.bin
中,但我总是发现它是总是空的我尝试了我所知道的每一件事谢谢
关于:
while(fread(&E,sizeof(equipement_agricole),1,f)!=0)
{
taille+=1;
}
verif tab1[taille];
while(fread(&E,sizeof(equipement_agricole),1,f)!=0)
当第一个 'while()' 循环退出时,'file pointer' 将在文件末尾,因此第二个 while()
循环将立即退出。
要解决此问题:
在第一个 while()
循环退出后,将 'file pointer' 重置为文件的开头。建议:
rewind( f );
以上将导致文件中的数据被设置到数组中tab1[]
可能还有其他问题,但是上述更正将使您的代码朝着正确的方向开始
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,sizeof(equipement_agricole),1,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,sizeof(equipement_agricole),1,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),1,g);
}
}
}
fclose(f);
fclose(g);
}
大家好,我需要你的帮助,我已经被困在这个问题上 2 天了,我找不到解决方案,所以我的问题是
在我从 equipement.bin
二进制文件中获取必要的信息并将其放入一个数组中之后,我对该数组进行了排序,然后我将数组放在 equipement_util.bin
中,但我总是发现它是总是空的我尝试了我所知道的每一件事谢谢
关于:
while(fread(&E,sizeof(equipement_agricole),1,f)!=0)
{
taille+=1;
}
verif tab1[taille];
while(fread(&E,sizeof(equipement_agricole),1,f)!=0)
当第一个 'while()' 循环退出时,'file pointer' 将在文件末尾,因此第二个 while()
循环将立即退出。
要解决此问题:
在第一个 while()
循环退出后,将 'file pointer' 重置为文件的开头。建议:
rewind( f );
以上将导致文件中的数据被设置到数组中tab1[]
可能还有其他问题,但是上述更正将使您的代码朝着正确的方向开始