标题:请求大神进来帮帮忙,搞了好久真的不知道哪里出错了,帮帮忙吧。谢谢
只看楼主
gymds
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2015-4-13
结帖率:40%
已结贴  问题点数:20 回复次数:8 
请求大神进来帮帮忙,搞了好久真的不知道哪里出错了,帮帮忙吧。谢谢
#include <stdio.h>        /*标准输入输出函数库*/
#include <stdlib.h>        /*标准函数库*/  
#include <string.h>        /*字符串函数库*/  
#include <conio.h>         /*屏幕操作函数库*/


#define HEADER1 "    -------------------------------商品信息-----------------------------------\n"
#define HEADER2 "   |  编号 |  类型 |  名称 | 进货价 |  单价 | 进货量 | 售出量 | 库存  |  利润  |  \n"
#define HEADER3 "   |-------|-------|-------|--------|-------|--------|--------|-------|--------|\n"
#define FORMAT  "   |  %-10s|  %-10s|  %-10s| %-10s  | %-10s |  %-10s |   %-10s| %-10s |  %-10s |\n"
#define DATA    "    p->num,p->type,p->name,p->jinhuojia,p->danjia,p->purchase,p->sale,p->stock,p->lirun\n"
#define END     "   ---------------------------------------------------------------------------\n"
#define N 100
#define LEN sizeof(struct shop )

int    saveflag=0;

struct shop
{    char num[4];        //编号
    char type[10];        //类型
    char name[10];        //名称
    float jinhuojia;        //单价
    float danjia;        //售价
    int purchase;        //进货量
    int sale;            //售出量
    int stock;            //库存
    float lirun;        //利润
    struct shop *next;
};
int n;
struct shop *creat(void)//定义函数,此函数返回一个指向链表头的指针
{  struct shop*head;
   struct shop*p1,*p2,*p3;
  int i,a;
  //system("cls");//清屏
  n=0;
  p1=p2=p3=(struct shop*)malloc(LEN);//开辟一个新单元
  head=p3;
  repeat1:printf("请输入7位商品编号(按0返回上一界面):");
      scanf("%d",&p1->num);
  if(p1->num==0)
  goto end;
  else
  {
   while(p1->num<1000000||p1->num>=10000000)
    {
     printf("输入错误!请重新输入!");
     goto repeat1;
    }   
  p3=head;
  if(n>0)
   {
    for(i=0;i<n;i++)
     {
       if(p1->num!=p3->num)
         p3=p3->next;
       else
             {
          printf("编号重复,请重新输入!\n");
        goto repeat1;

        }
     }
   }

  }
  printf("请输入商品名称:");
  scanf("%s",&p1->name);

  printf("请输入商品类型:");
  scanf("%s",&p1->type);

  printf("请输入商品进货价:");
  scanf("%d",&p1->jinhuojia);
  while(p1->jinhuojia<0)
  {
    printf("输入错误,请重新输入!");
    scanf("%d",&p1->jinhuojia);
  }

  printf("请输入商品单价:");
  scanf("%d",&p1->danjia);
  while(p1->danjia<0)
  {
    printf("输入错误,请重新输入!");
    scanf("%d",&p1->danjia);
  }

  printf("请输入商品进货量:");
  scanf("%d",&p1->purchase);
  while(p1->purchase<0)
  {
    printf("输入错误,请重新输入!\n");
    scanf("%d",&p1->purchase);
  }

  printf("请输入商品售出量:");
  scanf("%d",&p1->sale);
  while(p1->sale<0)
  {
    printf("输入错误,请重新输入!");
    scanf("%d",&p1->sale);
  }


 a=((p1->purchase)-(p1->sale))*((p1->danjia)-(p1->jinhuojia));   
  printf("商品的利润为:%d",a);
 
head=NULL;
while(p1->num!=0)
{
  n=n+1;
  if(n==1)
    head=p1;
  else
    p2->next=p1;
    p2=p1;
    p1=(struct shop*)malloc(LEN);
  repeat2:printf("请输入7位数商品编号(按0返回上一界面):");
    scanf("%d",&p1->num);
  if(p1->num==0)
  goto end;
  else
  {
    while(p1->num<1000000||p1->num>=10000000)
    {
     printf("输入错误!请重新输入!\n");
     goto repeat2;
     }

  }

p3=head;
if(n>0)
{
  for(i=0;i<n;i++)
  {
    if(p1->num!=p3->num)
       p3=p3->next;

    else
    {
      printf("编号重复,请重新输入!\n");
        goto repeat2;
    }
  }

 }


}



printf("请输入商品名称:");
scanf("%s",&p1->name);

printf("请输入商品类型:");
scanf("%s",&p1->type);

  printf("请输入商品进货价:");
  scanf("%d",&p1->jinhuojia);
 if(p1->jinhuojia<0)
  {
    printf("输入错误,请重新输入!");
    scanf("%d",&p1->jinhuojia);
  }

  printf("请输入商品单价:");
  scanf("%d",&p1->danjia);
  while(p1->danjia<0)
  {
    printf("输入错误,请重新输入!");
    scanf("%d",&p1->danjia);
  }

  printf("请输入商品进货量:");
  scanf("%d",&p1->purchase);
  while(p1->purchase<0)
  {
    printf("输入错误,请重新输入!");
    scanf("%d",&p1->purchase);
  }

  printf("请输入商品售出量:");
  scanf("%d",&p1->sale);
  while(p1->sale<0)
  {
    printf("输入错误,请重新输入!");
    scanf("%d",&p1->sale);
  }


 a=((p1->purchase)-(p1->sale))*((p1->danjia)-(p1->jinhuojia));   
  printf("商品的利润为:%d",a);


end:p1=head;
    p3=p1;
p2->next=NULL;//链表结尾
return(head);

}

main()
{    struct shop*pt;
    pt=creat();

}
搜索更多相关主题的帖子: include 字符串 进货 信息 
2015-04-13 13:58
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
得分:2 
出错信息贴出来

一片落叶掉进了回忆的流年。
2015-04-13 14:28
gymds
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2015-4-13
得分:0 
回复 2楼 诸葛欧阳
编译链接都没有错误,可是一运行无论怎么输入都出错。
一调试p1=p2=p3=(struct shop *malloc (LEN)\\开辟一个新单元就调试不下去了。
2015-04-13 14:57
gymds
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2015-4-13
得分:0 
回复 2楼 诸葛欧阳
2015-04-13 14:59
z_j_j_1
Rank: 4
等 级:业余侠客
威 望:1
帖 子:62
专家分:213
注 册:2015-4-4
得分:2 
回复 楼主 gymds
p1=p2=p3=(struct shop *malloc (LEN)
改成  p1=p2= p3=((struct shop *)malloc (LEN))
2015-04-13 15:14
gymds
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2015-4-13
得分:0 
回复 5楼 z_j_j_1
嗯嗯,改了,非常谢谢!
2015-04-13 15:46
gymds
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2015-4-13
得分:0 
还是不行啊!主要有两个问题:1、调试到p1=p2=p3=(struct shop *malloc (LEN)就结束调试了
                            2、输入完一次信息后就进入死循环,一直重复在这
2015-04-13 16:29
qq_mjb
Rank: 2
等 级:论坛游民
帖 子:10
专家分:16
注 册:2015-4-12
得分:16 
程序有多处逻辑错误。程序挺不好多读的,建议缩进写,层次分明点。要不读起来还得数括号个数。
你的目的是想建个链表,每个结构体保存一个批次货品纪录。第一个结构体保存下一个结构体指针。
我不明白:你为什么开辟一块儿单元,要个三个指针指着同一块儿单元。往下读,也挺乱,有的代码写得好像运行不到。或是结构体内指针指着自己。不知道我读的对不对,手机看的可能看错。
建议你重新梳理结构。逻辑错误,是你设计的问题。
我的建议是,
1.在main函数里建头指针和尾指针=NULL;再有一个计数器n=0.
2.设计一个创建记录的函数creat (),它只负责创建新一条记录。内部next =NULL;返回值为本条记录的指针。注:creat ()内部用do.输入...while(输入错误为真)别用goto了。

在主函数中,
tail  =creat();
head=tail;//头既是尾。

While(是否继续输入新条目?)

        Struct *p;
            p=creat();
            tail->next=p;//挂在尾巴上。
            tail =p;     //现在p是尾巴。
             n++;//多了一条记录。



如果想查看第m条记录,或是遍历链表。你继续编。
2015-04-13 22:38
gymds
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2015-4-13
得分:0 
回复 8楼 qq_mjb
嗯嗯,非常感谢你的建议
2015-04-18 23:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-443937-1-1.html




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

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