回 帖 发 新 帖 刷新版面

主题:大侠帮忙啊!

已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)四部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。函数SortDat()其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT10.DAT中。
#include "stdio.h"
#define N 10
struct sell
{ char dm[4];
  char mc[10];
  int dj;
  int sl;
  long int je;
}
void WriteDat(struct sell zl[],char *filename);
void ReadDat(struct sell zl[],char *filename);
void SortDat(struct sell zl[]);
main()
{ struct sell zl[N];
  int i;
  char *file1="IN.DAT",*file2="OUT.DAT";
  zl[i].je=zl[i].dj*zl[i].sl;
  printf("Please input %d selling information",N);
  printf("dm  mc dj sl je\n");
  for (i=0;i<10;i++) 
  scanf("%s %s %d %d %d",zl[i].dm,zl[i].mc,&zl[i].dj,&zl[i].sl,&zl[i].je);
  WriteDat(zl,file1);
  ReadDat(zl,file1);
  SortDat(zl);
  printf("%s %s %d %d %d",zl[i].dm,zl[i].mc,zl[i].dj,zl[i].sl,zl[i].je);
  WriteDat(zl,file2);
}
void ReadDat(struct sell zl[],char *filename)
{ FILE *fp;
  if((fp=fopen(filename,"rb"))==NULL)
  { printf("\nCan't open this file!\n");
    exit(0);
  }
  fread(zl,sizeof(struct sell),N,fp);
  if(ferror(fp))
  {printf("File Error\n");
   exit(0);
  }
  fclose(fp);
  printf("\n%s read finished!\n",filename);
}
void WriteDat(struct sell zl[],char *filename)
{ FILE *fp;
  if((fp=fopen(filename,"wb"))==NULL)
  {printf("\nCan't open this file\n");
   exit(0);
  }
  fwrite(zl,sizeof(struct sell),N,fp);
  if(ferror(fp))
  {printf("File Error\n");exit(0);
  }
  fclose(fp);
  printf("\n%s write finished!\n",filename);
}
void SortDat(struct sell zl[])
{ int i,j;
  struct sell t[20],k[20];
  for(i=0;i<9;i++)
  {for(j=i+1;j<10;j++)
   if(zl[i].dm<zl[j].dm)
    {t[i]=zl[i];
     zl[i]=zl[j];
     zl[j]=t[i];
    }
     else
    if(zl[i].dm==zl[j].dm)
    {if(zl[i].je<zl[j].je)
     k[i]=zl[i];
     zl[i]=zl[j];
     zl[j]=k[i];
    }
   }
 }

回复列表 (共1个回复)

沙发

我不说你程序的逻辑和设计方式 
说下你里边的程序错误

1 用exit(0);函数需要加#include "stdlib.h"头文件
2 struct sell
{ char dm[4];
  char mc[10];
  int dj;
  int sl;
  long int je;
} //需要一个分号

3 int i;
  char *file1="IN.DAT",*file2="OUT.DAT";
  zl[i].je=zl[i].dj*zl[i].sl;
  你的i定义之后没有赋值就在使用

我来回复

您尚未登录,请登录后再回复。点此登录或注册