鱼C论坛

 找回密码
 立即注册
查看: 265|回复: 4

求助

[复制链接]
发表于 2023-11-1 18:03:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么我这个入库后再出库会是一堆数字,可以帮我看看吗
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define stack_init_size 100
  4. #define stackincrement 10
  5. #define OK 1
  6. #define ERROR 0
  7. typedef int status;
  8. typedef struct            //声明结构体Production用于表示生产日期
  9. {   int year;
  10.     int month;
  11.     int day;
  12. }production;
  13. typedef struct
  14. {    int  number;                  //商品编号
  15.          production date;           //商品生产日期
  16. }selemtype;
  17. typedef struct{
  18.         selemtype *base;//栈底指针
  19.         selemtype *top;//栈顶指针
  20.         int stacksize;
  21. }sqstack;
  22. void initstack(sqstack &s)
  23. {
  24.         s.base=(selemtype*)malloc(stack_init_size*sizeof(selemtype));
  25.         s.top=s.base;
  26.         s.stacksize=stack_init_size;
  27. }
  28. void push(sqstack &s,selemtype e)//入栈
  29. {
  30.         if(s.top-s.base>=s.stacksize){
  31.                 s.base=(selemtype*)realloc(s.base,(s.stacksize+stack_init_size)*sizeof(selemtype));
  32.                 if(!s.base)  
  33.                        printf("error");
  34.                            s.top=s.base+s.stacksize;
  35.                            s.stacksize+=stack_init_size;
  36.         }
  37.         *s.top=e;
  38.         s.top++;
  39. }
  40. void pop(sqstack &s,selemtype k)//出栈
  41. {
  42.         selemtype *e=s.top-1;
  43.         int i=0;
  44.         if(s.base==s.top){
  45.                 printf("栈为空");
  46.         }
  47.         k=*e;
  48.         s.top--;
  49. }
  50. status gettop(sqstack s,selemtype k)//取栈顶元素
  51. {
  52.         selemtype e;
  53.         if(s.top!=s.base){
  54.       k=*(s.top-1);
  55.           return OK;
  56.         }
  57.         return ERROR;
  58. }
  59. void print(sqstack &s)//输出
  60. {
  61.         selemtype *e=s.base;
  62.         int i=0;
  63.         while(i<(s.top-s.base))
  64.         {
  65.                 printf("%d ",*e);
  66.                 i++;
  67.                 e++;
  68.         }
  69. }
  70. status judge(sqstack &s,selemtype e)//栈顶元素大于输入返回1
  71. {
  72.         selemtype k;
  73.         gettop(s,k);
  74.         if(k.date.year>e.date.year){
  75.                 return OK;
  76.         }
  77.         else if(k.date.year==e.date.year){
  78.                 if(k.date.month>e.date.month){
  79.                         return OK;}
  80.                 else if(k.date.month==e.date.month){
  81.                         if(k.date.day>e.date.day){
  82.                                 return OK;
  83.                         }
  84.                         else if(k.date.day==e.date.day){
  85.                                 return OK;
  86.                         }
  87.                 }
  88.                 }
  89.         else {
  90.                 return ERROR;
  91.         }
  92. }
  93. void Lineup()
  94. {
  95.         int i,j=1,t;
  96.         sqstack s,temp;
  97.         initstack(s);
  98.         initstack(temp);
  99.         while(j!=4)
  100.         {
  101.                 printf("1.入库  2.出库  3.查看货物   4.退出\n");
  102.                 scanf("%d",&j);
  103.                 switch(j){
  104.                         case 1:{
  105.                                         selemtype e,k;
  106.                                         printf("请输入商品编号及生产日期:\n");
  107.                                    scanf("%d %d %d %d",&e.number,&e.date.year,&e.date.month,&e.date.day);
  108.                                         if(s.top==s.base)
  109.                                         {
  110.                                                 push(s,e);
  111.                                         }
  112.                                         else{
  113.                                                         gettop(s,k);
  114.                                                         t=0;
  115.                                                         while(!t){
  116.                                                                 pop(s,k);
  117.                                                                 push(temp,k);
  118.                                                                 t=judge(s,e);
  119.                                                         }
  120.                                                         push(s,e);
  121.                                                         while(temp.base!=temp.top)
  122.                                                         {
  123.                                                                 pop(temp,k);
  124.                                                                 push(s,k);
  125.                                                         }
  126.                                                 }
  127.                                                 break;}
  128.                         case 2: {
  129.                                          selemtype w;
  130.                                      pop(s,w);
  131.                                          printf("该商品编号为%d,生产日期为%d %d %d",w.number,w.date.year,w.date.month,w.date.day);
  132.                                          break;}
  133.                     case 3:{
  134.                                         print(s);
  135.                                         break;}
  136.                 }
  137.                 }
  138.         }
  139. int main()
  140. {
  141.         Lineup();
  142.     return 0;
  143. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-1 18:03:16 | 显示全部楼层
这段代码中出现一堆数字的原因是,程序在出栈操作时没有正确打印出栈元素的具体信息。

在函数 void pop(sqstack &s,selemtype k) 中,将出栈的元素赋值给了参数 k ,但没有进行打印操作。所以在出库操作中,只打印了出栈元素的编号,而没有打印出栈元素的生产日期。

为了解决这个问题,我们需要在出库操作中打印出栈元素的具体信息。修改代码如下:

  1. case 2: {
  2.     selemtype w;
  3.     pop(s, w);
  4.     printf("该商品编号为%d, 生产日期为%d年%d月%d日\n", w.number, w.date.year, w.date.month, w.date.day);
  5.     break;
  6. }
复制代码


这样就能正确打印出栈元素的编号和生产日期了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-1 18:04:21 | 显示全部楼层
你好,看起来你的代码是一个栈的实现,但是我需要更多的信息才能帮助你解决问题。你说“入库后再出库会是一堆数字”,你指的是什么样的数字?是商品编号吗?这些数字是随机的吗?或者它们在你的预期之内?

请提供更多细节和背景信息,这样我才能更好地理解你的问题并给出有针对性的回答。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-1 18:08:54 | 显示全部楼层
Mike_python小 发表于 2023-11-1 18:04
你好,看起来你的代码是一个栈的实现,但是我需要更多的信息才能帮助你解决问题。你说“入库后再出库会是一 ...

1.入库  2.出库  3.查看货物   4.退出
1
请输入商品编号及生产日期:
2 2023 3 2
1.入库  2.出库  3.查看货物   4.退出
2
该商品编号为1246513747,生产日期为1213482797 1229794642 1281.入库  2.出库  3.查看货物   4.退出
就是会出现这种情况,这是运行的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-1 18:12:31 | 显示全部楼层
isdkz 发表于 2023-11-1 18:03
这段代码中出现一堆数字的原因是,程序在出栈操作时没有正确打印出栈元素的具体信息。

在函数 void pop( ...

这个答案与我运行出来的是一样的啊,都是一堆数字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 07:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表