c语言结构体 急!急!急!!!

来源:百度知道 编辑:UC知道 时间:2024/06/05 22:06:03
题目13每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。编制函数SortDat(),其功能要求:按产品代码从小到大进行排列,若产品代码相等,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中:

我写的代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct product//结构体
{
char dm[4];
char mc[10];
int dj;
int sl;
long je;
}sell[5];

void writefile();//往文件里写数据
void readfile();//从文件中读数据
void sortdata();//实现功能要求

void main()
{
for(int i=0;i<5;i++)
{
scanf("%s %s %d %d ",sell[i].dm,sell[i].mc,&sell[i].dj,&sell[i].sl);
sell[i].je=sell[i].dj*sell[i].sl;
}
writefile();
readfile();
printf("After sort the result is:\n");
sortdata();

}

void writefile()
{
FILE *fp;
fp=fopen("pro","wb");
for(int i=0;i<5;i++)
fwrite(&sell[i],sizeof(struct pr

我的答案跟2楼的差不多。通过调式,发现dm和mc的地址是连着的,所以会出现两次名称。所以我申请了5个字符,最后一个赋值为‘\0’就行了。至于第一个问题,我的改法是把最后的%d后面的空格去掉就可以了。我测试过了,结果应该符合你的要求。改完的代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct product//结构体
{
char dm[5];//这里多申请一个地址
char mc[10];
int dj;
int sl;
long je;
}sell[5];

void writefile();//往文件里写数据
void readfile();//从文件中读数据
void sortdata();//实现功能要求

void main()
{
for(int i=0;i<5;i++)
{
scanf("%s %s %d %d",sell[i].dm,sell[i].mc,&sell[i].dj,&sell[i].sl);//%d最后的空格去掉
sell[i].dm[4]='\0';//最后加上\0
sell[i].je=sell[i].dj*sell[i].sl;
}
writefile();
readfile();
printf("After sort the result is:\n");
sortdata();
system("pause");
}

void writefile()
{
FILE *fp;
fp=fopen("pro","wb");
for(int i=0;i<5