struct sp
{
int id; //商品编号
char name[20]; //商品名称
char Catagory[10]; //商品类别
int kcl; //商品库存量
int xsl; //商品销售量
int N;
struct sp*next; //指向下一节点
};
void tongji(sp *L) //统计文件中商品销售量并排序
{
sp *p,*q,*tail,*l;
FILE *fp; //打开已有商品信息的文件
if((fp=fopen("sp.txt","r+"))==NULL)
{
printf("不能打开文件!\n");
exit(0);
}
const int P=100; //此为循环录入到p
for(int i=0;i<P;i++)
{
p=(sp *)malloc(sizeof(sp));
fscanf(fp,"%s %d %s %d %d ",&p->name,&p->id,&p->Catagory,&p->kcl,&p->xsl);
}
tail=NULL; //尾节点置空
while((L->next->next)!=tail) //链表的一种冒泡排序
{
p=L;
q=L->next;
while(q->next!=tail)
{
if((q->xsl)>(q->next->xsl))
{
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
q=p->next;
}
q=q->next;
p=p->next;
}
tail=q;
}
printf("商品销售量,销售比例从小到大结果如下:\n");
l=L->next;int sum=0;float xsbl;
while(l!=NULL) //求出销售总数
{
sum=sum+l->xsl;
l=l->next;
}
l=L->next;
while(l!=NULL) //打印出销售量 销售比例
{
xsbl=(l->xsl)/sum;
printf("%s(%d)(%.2f) ",l->name,l->xsl,xsbl);
l=l->next;
}
}
删除所有文件操作,代码无错误。
在加入文件时,可以打开文件并进行循环赋值。
后续排序输出等无法进行。