+-×÷=∅ 2021-06-29 15:58 采纳率: 100%
浏览 78
已采纳

c语言在链表上添加文件

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;
    }
}

删除所有文件操作,代码无错误。

在加入文件时,可以打开文件并进行循环赋值。

后续排序输出等无法进行。

 

  • 写回答

4条回答 默认 最新

  • qzjhjxj 2021-06-29 17:33
    关注

    修改如下,供参考:

    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;
        }
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊