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

该程序将两个已排序的数据文件按照结构体(包含学号、姓名和工资)内容合并,并按工资升序排列,最后将结果写入新的文件。如果文件无法打开,程序会提示错误并终止。程序使用冒泡排序算法进行排序,并在控制台打印排序后的结果。

不知道哪里有问题,结果有很多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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值