| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1020 人关注过本帖
标题:求热心C语言高手帮忙看一下这个函数体!!
只看楼主 加入收藏
hi_ydy
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-9-6
结帖率:0
收藏
已结贴  问题点数:20 回复次数:14 
求热心C语言高手帮忙看一下这个函数体!!
先说明 我不是来要作业答案的

以下的代码都是我一个字一个字打的

debug没有错 但是我知道里面很多错误

我刚才问了一下同学 我的for循环是错的

有几处文件没有关闭

但是改了之后还是有错误的

麻烦好心人帮忙看一下错误在哪里 谢谢


struct s_information
{
    char name[20];
    float bid;
    float price;
    int jinhuo;
    int chuhuo;
    int kucun;
    int num;
    struct s_information *next;
};
void shopping(int a)
{
    //把商品信息文件里的信息放到p指向的链表
    FILE *f_information;
    f_information = fopen("D:\\f_information.txt","r");
   
    struct s_information *head = NULL, *p;
    head = (struct s_information *)malloc(sizeof(struct s_information));
    p = head;
    printf("\n=================================商品信息====================================\n");
    printf("    商品名称    商品价格    剩余数量\n");
    while (!feof(f_information))
    {

        fscanf(f_information,"%s %f %f %d %d %d %d",&p->name,&p->bid,&p->price,&p->jinhuo,&p->chuhuo,&p->kucun,&p->num);
        printf("%12s%12.2f%12d\n",p->name,p->price,p->kucun);
        p->next = (struct s_information *)malloc(sizeof(struct s_information));
        p = p->next;
        }
//    p->next = NULL;
   
    //把购物记录文件里的信息放到p1指向的链表
    FILE *f_record;
    f_record = fopen("D:\\f_record.txt","r");
         
    struct s_information *head1 = NULL, *p1;
    head1 = (struct s_information *)malloc(sizeof(struct s_information));
    p1 = head1;
   
    struct s_information *head2 = NULL, *p2;
    head2 = (struct s_information *)malloc(sizeof(struct s_information));
    p2 = head2;
   
    while (!feof(f_record))
    {
        fscanf(f_record,"%s %f %d\n",&p1->name,&p1->price,&p1->num);
//        printf("%6s%6.2f%6d\n",p1->name,p1->price,p1->num);
        p1->next = (struct s_information *)malloc(sizeof(struct s_information));
        p1 = p1->next;
        }
//    p1->next = NULL;
   
    //清空小票
   
    FILE *f_receipt;
    f_receipt = fopen("D:\\f_receipt.txt","w+");
   
    //开始购买   
    while (1)
    {
        char name[20];
        printf("\n请输入商品名称(输入E结束): ");
        scanf("%s",name);
        if (strcmp(name,"E") == 0)
            break;
        //判断商品名称是否被包含在已知商品中
        int num, flag = 0;
        for (p = head; p->next != NULL; p = p->next)
        {
            if (strcmp(name,p->name) == 0)
            {
                flag = 1;
                break;
                }   
            }
        if (flag == 0)
        {
            printf("\n该商品不存在,请重新输入。\n\n");
            shopping(a);
            }
        
        if (p->kucun == 0)
        {
            printf("该商品目前无货,请选购其他商品。\n");
            continue;
            }
        
        //判断购买数量是否少于库存数量
        printf("请输入购买数量: ");
        scanf("%d",&num);
        
        while ((num <= 0) || (num > p->kucun))
        {
            printf("商品数量输入错误,请重新输入。\n");
            printf("请输入购买数量:");
            scanf("%d",&num);
            }
        //到这里商品的名称和数量都已经符合要求了 开始进行文件操作
        
        //现在p->name应该和name是一样的 即该节点就是我们需要更改商品信息的节点
        
        p->num = num;
        p->chuhuo = p->chuhuo + p->num;
        p->kucun = p->kucun - p->num;
        
        //商品信息的链表已经修改完毕了
        
        for (p1 = head1; p1->next != NULL; p1 = p1->next)
        {
            if (strcmp(p->name,p1->name) == 0)
            {
                p1->num = p1->num + p->num;
                break;
                }
            p1->next = (struct s_information *)malloc(sizeof(struct s_information));
            }

        //购物记录的链表已经修改完毕了
        FILE *f_receipt;
        f_receipt = fopen("D:\\f_receipt.txt","a");
        fprintf(f_receipt,"%s %f %d\n",p->name,p->price,p->num);
        //将更改完的商品信息链表写入文件
    }
   
    f_information = fopen("D:\\f_information.txt","w+");
    for (p = head; p->next != NULL; p = p->next)
    {
        fprintf(f_information,"%s %f %f %d %d %d %d\n",p->name,p->bid,p->price,p->jinhuo,p->chuhuo,p->kucun,p->num);
        }
   
    //将更改完的购买记录链表写入文件
    f_record = fopen("D:\\f_record.txt","w+");
    for (p1 = head1; p1->next != NULL; p1 = p1->next)
    {
        fprintf(f_record,"%s %f %d\n",p1->name,p1->price,p1->num);
        }
   
//    f_receipt = fopen("D:\\r_receipt.txt","w+");
//    for (p2 = head2; p2->next != NULL; p2 = p2->next)
//    {
//        fprintf(f_record,"%s %f %d\n",p2->name,p2->price,p2->num);
//        }
   
    //将小票文件里的信息打印出来
    float total = 0;
    f_receipt = fopen("D:\\f_receipt.txt","r");
   
    struct s_information *head3 = NULL, *p3;
    head3 = (struct s_information *)malloc(sizeof(struct s_information));

    p3 = head3;
    printf("\n=================================购物清单====================================\n");
    while (!feof(f_receipt))
    {
        fscanf(f_receipt,"%s %f %d",&p3->name,&p3->price,&p3->num);

        printf("%12s%12.2f%12d%12.2f\n",p3->name,p3->price,p3->num,(p3->price) * (p3->num));
        total += (p3->price) * (p3->num);
        
        p3->next = (struct s_information *)malloc(sizeof(struct s_information));
        p3 = p3->next;
        }
    printf("\n商品总价:%.2f",total);
   
    fclose(f_information);
    fclose(f_record);
    fclose(f_receipt);
   
    menu(a);
   
}

[ 本帖最后由 hi_ydy 于 2013-9-6 17:49 编辑 ]
搜索更多相关主题的帖子: shopping C语言 price 信息 
2013-09-06 16:52
hi_ydy
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-9-6
收藏
得分:0 
希望各位帮忙

[ 本帖最后由 hi_ydy 于 2013-9-6 17:51 编辑 ]
2013-09-06 16:54
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:3 
什么叫没学过链表
马上要交了

你就是开学了,要交作业,自己又不会
就上网抄
结果抄的代码运行不了,就来求助撒?

懒得理你

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-09-06 17:12
hi_ydy
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-9-6
收藏
得分:0 
回复 3楼 peach5460
这是我写了好几天的代码

请问您怎么看出来我这是抄来的啊?

我写到这个程度debug不出错但是程序又没办法正确的运行我才来问的啊

呵呵
2013-09-06 17:44
hi_ydy
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-9-6
收藏
得分:0 
回复 2楼 hi_ydy
您可以在网上搜索一下

看能不能搜到像我写的这么幼稚的代码和注释
2013-09-06 17:45
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
我没看你的代码,只是你代码前的描述
行,你把帖子改了...

我记得当时你说
你没学过链表,代码里链表相关的有问题
马上要交作业了,很急...

你自己都说是做作业了...
那学校可能布置没学过的知识做作业么?
既然学校布置作业就说明你学过...而你却说你不懂链表,没学过
由此我判断你肯定是上课没好好听讲...
没学过链表,那这段关于链表的代码哪来的呢...
那估计就是抄的咯

我是这么理解的

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-09-06 18:09
jg658237
Rank: 7Rank: 7Rank: 7
来 自:青藏高原
等 级:黑侠
帖 子:224
专家分:529
注 册:2013-8-8
收藏
得分:3 
有点难度啊

武功再高也怕菜刀.
2013-09-06 18:18
hi_ydy
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-9-6
收藏
得分:0 
回复 5楼 peach5460
我们的确没学数据结构

数据结构是大二下要学的

我浅显的自学了一下

好吧 是我的描述有错误

既然如此 恳请版主您帮忙看一下


[ 本帖最后由 hi_ydy 于 2013-9-6 19:05 编辑 ]
2013-09-06 19:03
loveClangage
Rank: 8Rank: 8
来 自:广东云浮
等 级:蝙蝠侠
帖 子:326
专家分:891
注 册:2013-8-23
收藏
得分:3 
太多了,

编写的程序,不能改变世界,却可以改变自己...
2013-09-07 09:23
power_c
Rank: 2
来 自:火星
等 级:论坛游民
帖 子:19
专家分:33
注 册:2013-9-7
收藏
得分:3 
其实你的next指针无需动态开辟,直接赋值NULL即可,fopen 你把权限改成可读写追加  即“a+”
最好把函数都封装一下,只访问指针 ,可以节省你大量时间,说实话你的程序乱,没有可读性,看得头疼


           ----------------脑袋空不要紧,关键是不要进水
2013-09-07 22:15
快速回复:求热心C语言高手帮忙看一下这个函数体!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019607 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved