0
点赞
收藏
分享

微信扫一扫

二进制文件存入结构体数组,读取结构体数组

婉殇成长笔记 2022-04-08 阅读 65
c++

不知道哪里有问题,结果有很多0 

#include <stdio.h>
#include <stdlib.h>
    struct stu{
    char name[20];
    int num;
    float wages;
    }a[20];//定义结构体数组
void mergeFile(FILE*fp1,FILE*fp2,FILE*fp3){
    int k=0;
    struct stu change;
    while(fgetc(fp1)!=EOF){
        fscanf(fp1,"%d %s %f",a[k].num,a[k].name,a[k].wages);
        k++;
    }
    while(fgetc(fp2)!=EOF){
        fscanf(fp2,"%d %s % f",a[k].num,a[k].name,a[k].wages);
        k++;
    }                                    //将两个文件的内容全部存入结构体数组
for(int i=0;i<k-1;i++){
   for(int j=0;j<k-i;j++){
    if(a[i].wages >a[j].wages ){
      change=a[i];
      a[i]=a[j];
      a[j]=change;
    }
   }                                    //通过冒泡排序使结构体数组内容编程升序
  }
for(int n=0;n<k;n++){
    fwrite(a,sizeof(stu),1,fp3);
}//将结构体内容存入a3
rewind(fp3);
for(int X=0;X<k;X++){
printf("学号:%d\t 姓名:%s\t 成绩:%5.2f\n",a[X].num,a[X].name,a[X].wages);
}

    
}
int main(){
    FILE *fp1,*fp2,*fp3;
    void mergeFile(FILE*fp1,FILE*fp2,FILE*fp3);
    if ((fp1= fopen("a1.dat", "rb"))==NULL)
    {
        printf("不能打开文件1!");
        exit(0);                                
    }//打开文件1
    if ((fp2= fopen("a2.dat", "rb"))==NULL)
    {
        printf("不能打开文件2!");
        exit(0);                                
    }//打开文件2
        if ((fp3= fopen("a3.dat", "rb"))==NULL)
    {
        printf("不能打开文件3!");
        exit(0);                                
    }//打开文件3
mergeFile(fp1,fp2,fp3);//调用函数

fclose(fp1);
fclose(fp2);
fclose(fp3);
return 0;
}
举报

相关推荐

0 条评论