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