鱼C论坛

 找回密码
 立即注册
查看: 2277|回复: 5

[已解决]陷入循环,无法输出数据

[复制链接]
发表于 2022-11-10 23:36:40 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 爱喝的三明治 于 2022-11-11 00:02 编辑

printf不输出数据
问题出在133和138行之间无线循环
无法输出
在查询这个功能里没办法输出数据
实在是找不到问题在哪里,没有一点头绪

  1. #include <stdio.h>
  2. #include<string.h>
  3. #include <stdlib.h>

  4. struct Goods
  5. {
  6.         int id;//产品编号
  7.         char kudan1;//入库单号
  8.         char kudan2;//出库单号
  9.         char name;//名称
  10.         int num;//数量
  11.         float cost;//成本
  12.         float price;//售价
  13.         float profit;//利润
  14.                
  15. }goods[50],rk,ck,cx;


  16. void input();      
  17. void output();
  18. void search();
  19. void menu();

  20. int main(){

  21.         int command = 0;  //command用于存储管理员命令对应的菜单数字
  22.         int a = 1;      //用于判断是否退出系统
  23.         while(a){       //利用while循环实现对管理系统进行多种操作
  24.             printf("1.入库2.出库3.查询\n");
  25.             printf("请输入操作对应的数字!\n\n");
  26.             scanf("%d", &command);
  27.                 switch(command){
  28.                     case(1):        //进库
  29.                             input();
  30.                             break;
  31.                     case(2):        //出库
  32.                             output();
  33.                         break;
  34.                     case(3):        //查询库存
  35.                             search();
  36.                         break;
  37.             
  38.                     default:
  39.                             printf("请输入正确的数字!\n\n");   //提示管理员重新输入正确的菜单数字
  40.                              break;
  41.             }
  42.         }
  43.         printf("您已退出可口可乐广东分公司仓库管理系统!");   //提示管理员成功退出系统
  44.         return 0;
  45. }


  46. int S=0;//产品种类
  47. void input()//入库
  48. {
  49.         int a,i=0,j=0;
  50.         printf("请输入入库产品种类:\n");
  51.         scanf("%d",&a);
  52.         for(j=0;j<a;j++)
  53.         {        printf("请输入第%d个产品信息\n",(j+1));
  54.             printf("产品名称:");
  55.         scanf("%s",&goods[i].name);               
  56.             printf("产品编号:");
  57.             scanf("%d",&goods[i].id);
  58.             printf("例:2022年1月填为202201\n");
  59.                 printf("入库单号:\n");
  60.                 scanf("%s",&goods[i].kudan1);
  61.                 printf("数量:");
  62.                 scanf("%d",&goods[i].num);
  63.                 printf("请再输入一次\n");
  64.                 scanf("%d",&rk.num);

  65.                 int flag = 0;  
  66.         for(i = 0; i <S; i++)
  67.                 {  
  68.                 if(rk.id==goods[i].id)
  69.                         {flag = 1;
  70.                         goods[i].num =rk.num+goods[i].num;
  71.                         break;
  72.                     }
  73.                 }
  74.                     if (flag == 0)
  75.                         {
  76.                 S++;
  77.                 }
  78.         }               
  79. }

  80. void output()//出库
  81. {
  82.         int b,j=0,i=0;
  83.     printf("请输入本次出库产品种类数:\n");
  84.     scanf("%d", &b);
  85.     for(j=0;j<b;j++)
  86.         {
  87.                 printf("请输入出库单号\n");
  88.                 scanf("%s",&goods[i].kudan2);
  89.         printf("\n请输入第%d个产品编号:\n",(j+1));
  90.         scanf("%d",&ck.id);
  91.         printf("请输入出库数量:\n");
  92.         scanf("%d",&ck.num);
  93.         int flag=0;
  94.         for(i=0;i<S;i++)
  95.                 {
  96.                 int t=0;
  97.                 if(ck.id==goods[i].id)
  98.                         {
  99.                             flag=1;
  100.                             if(goods[i].num==ck.num)
  101.                                 {
  102.                                         printf("库存清零\n");
  103.                             S--;
  104.                         }
  105.                         else if((goods[i].num-ck.num)<0)
  106.                         printf("库存不足,出库失败\n");
  107.                         else
  108.                         {
  109.                                 goods[i].num=(goods[i].num-ck.num);
  110.                                 printf("出库成功\n");
  111.                                 }
  112.                                 break;
  113.                     }
  114.         }
  115.         }
  116. }

  117. void search()
  118. {
  119.         int i,s,flag;
  120.         printf("1.查询入库单\n");
  121.         printf("2.查询出库单\n");
  122.         printf("3.退出菜单\n");
  123.         while(1){
  124.         printf("请选择编号:");
  125.     scanf("%d",&s);
  126.     flag=0;
  127.     switch(s){
  128.         case 1:
  129.         printf("请输入要查询的入库单号:\n");
  130.     scanf("%d",&cx.kudan2);
  131.     for(i=0;i<S;i++)
  132.         if(goods[i].kudan1==cx.kudan1){
  133.         flag=1;
  134.         printf("出库单号  编号  名称  数量  成本\n");
  135.         printf("%d%d%s%d%f\n",goods[1].kudan1,goods[i].id ,goods[i].name ,goods[i].num ,goods[i].cost);}
  136.     if(flag=0)
  137.         printf("该单号不存在!\n");
  138.     break;
  139.         case 2:
  140.         printf("请输入要查询出库单号:\n");
  141.     scanf("%d",&cx.kudan2);
  142.     for(i=0;i<S;i++)
  143.         if(goods[i].kudan2==cx.kudan2){
  144.         flag=1;
  145.         printf("出库单号  编号  名称  数量  利润\n");
  146.         goods[i].profit=(goods[i].price-goods[i].cost)*ck.num;
  147.         printf("%d%d%s%d%f\n",goods[1].kudan2,goods[i].id ,goods[i].name ,goods[i].num ,goods[i].profit);}
  148.     if(flag=0)
  149.         printf("该单号不存在!\n");
  150.     break;
  151.     case 3:
  152.     return;
  153.         default:
  154.                 printf("ddd");
  155.                 break;
  156.         }
  157.   }
  158. }
  159.   

复制代码
最佳答案
2022-11-11 00:34:01
本帖最后由 jackz007 于 2022-11-11 00:46 编辑
爱喝的三明治 发表于 2022-11-11 00:14
所以功能3中为什么有问题啊?


    你的数据结构模型都是错的,功能怎么能正确?比如,kudan1、kudan2 有何用?为什么一定要用字符串?用整型数就不行吗,既然是库存信息,用一个唯一性的库存编号还不能解决问题?
     search() 函数判断 kudan1、kudan2 与需要查询的库单号是否相同用的是  == ,那样做不可以,它们是字符串,判断相等得用 strcmp() 函数。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-10 23:55:43 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-11 00:05 编辑
  1. struct Goods
  2. {
  3.         int id;//产品编号
  4.         char kudan1[256] ; //【修改】:字符串是需要很多字符空间的
  5.         char kudan2[256] ; //【修改】:字符串是需要很多字符空间的  
  6.         char name[256] ; //【修改】:字符串是需要很多字符空间的
  7.         int num;//数量
  8.         float cost;//成本
  9.         float price;//售价
  10.         float profit;//利润
  11. }goods[50],rk[20],ck[20],cx[90];
复制代码

        你的定义 kudan1、kudan2、name 只能存储 1 个字符,真的够用吗???

        你的代码逻辑非常的混乱,不知道数据、功能是如何组织和规划的,比如,goods[50],rk[20],ck[20],cx[90]; 这些都是干什么用的,彼此之间什么关系?有没有可能根本不需要这么多账本???账本可是结构数组,搞一个不够使,一定要搞那么多,真的有必要吗,要知道,账本多了容易混乱!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-11 00:11:41 | 显示全部楼层
jackz007 发表于 2022-11-10 23:55
你的定义 kudan1、kudan2、name 只能存储 1 个字符,真的够用吗???

        你的代码逻辑 ...

rk[20],ck[20]这些是为了让if(goods[i].kudan1==cx.kudan1)这种运行,我也想不到其他办法了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-11 00:14:09 | 显示全部楼层
jackz007 发表于 2022-11-10 23:55
你的定义 kudan1、kudan2、name 只能存储 1 个字符,真的够用吗???

        你的代码逻辑 ...

所以功能3中为什么有问题啊?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-11 00:34:01 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-11-11 00:46 编辑
爱喝的三明治 发表于 2022-11-11 00:14
所以功能3中为什么有问题啊?


    你的数据结构模型都是错的,功能怎么能正确?比如,kudan1、kudan2 有何用?为什么一定要用字符串?用整型数就不行吗,既然是库存信息,用一个唯一性的库存编号还不能解决问题?
     search() 函数判断 kudan1、kudan2 与需要查询的库单号是否相同用的是  == ,那样做不可以,它们是字符串,判断相等得用 strcmp() 函数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-11 09:52:20 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-11 09:53 编辑

        只是排除了逻辑障碍,不能保证业务逻辑正确
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>

  4. struct Goods
  5. {
  6.         int id           ; //产品编号
  7.         char kudan1[256] ; //入库单号
  8.         char kudan2[256] ; //出库单号
  9.         char name[256]   ; //名称
  10.         int num          ; //数量
  11.         float cost       ; //成本
  12.         float price      ; //售价
  13.         float profit     ; //利润
  14. } goods[50] , rk[20] , ck[20] , cx[90] ;

  15. int S = 0 ; //产品种类

  16. void input()//入库
  17. {
  18.         int a , i = 0 , j = 0                                         ;
  19.         printf("请输入入库产品种类数:")                              ;
  20.         scanf("%d" , & a)                                             ;
  21.         for(i = 0 ; i < a ; i ++) {
  22.                 printf("请输入第 %d 个产品信息\n" , i + 1)            ;
  23.                 printf("产品名称:")                                  ;
  24.                 scanf("%s" , goods[i] . name)                         ;
  25.                 printf("产品编号:")                                  ;
  26.                 scanf("%d", & goods[i] . id)                          ;
  27.                 printf("入库单号 (例:2022年1月填为202201) :")       ;
  28.                 scanf("%s", goods[i] . kudan1)                        ;
  29.                 printf("数量:")                                      ;
  30.                 scanf("%d" , & goods[i] . num)                        ;
  31.                 rk[i].num = goods[i] . num                            ;
  32.         }
  33.         int flag = 0                                                  ;
  34.         for(i = 0 ; i < S ; i ++) {  
  35.                 if(rk[i] . id == goods[i] . id) {
  36.                         flag = 1                                      ;
  37.                         goods[i] . num = rk[i] . num + goods[i] . num ;
  38.                         break                                         ;
  39.                 }
  40.         }
  41.         if (flag == 0) S ++                                           ;
  42. }

  43. void output()//出库
  44. {
  45.         int b , j = 0 , i = 0 , t , flag                     ;
  46.         printf("请输入本次出库产品种类数:")                 ;
  47.         scanf("%d" , & b)                                    ;
  48.         for(i = 0 ; i < b ; i ++) {
  49.                 printf("请输入出库单号:")                   ;
  50.                 scanf("%s" ,  goods[i] . kudan2)             ;
  51.                 printf("\n")                                 ;
  52.                 printf("请输入第 %d 个产品编号:" , (i + 1)) ;
  53.                 scanf("%d" , & ck[i] . id)                   ;
  54.                 printf("请输入出库数量:")                   ;
  55.                 scanf("%d", & ck[i] . num)                   ;
  56.         }
  57.         flag = 0                                             ;
  58.         for(i = 0 ; i < S ; i ++) {
  59.                 t = 0                                        ;
  60.                 if(ck[i] . id == goods[i] . id) {
  61.                         flag = 1                             ;
  62.                         if(goods[i] . num == ck[i] . num) {
  63.                                 printf("库存清零\n")         ;
  64.                                 S --                         ;
  65.                         } else if((goods[i] . num - ck[i] . num) < 0) {
  66.                                 printf("库存不足,出库失败\n") ;
  67.                         } else {
  68.                                 goods[i] . num = (goods[i] . num - ck[i] . num) ;
  69.                                 printf("出库成功\n")                            ;
  70.                         }
  71.                         break                                                   ;
  72.                 }
  73.         }
  74. }

  75. void search()
  76. {
  77.         int i , s , flag                                           ;
  78.         char kudan1[256] , kudan2[256]                             ;
  79.         while(1) {
  80.                 for(;;) {
  81.                         printf("\n")                               ;
  82.                         printf("\t    * [信息查询] * \n\n")        ;
  83.                         printf("\t    1.查询入库单\n")             ;
  84.                         printf("\t    2.查询出库单\n")             ;
  85.                         printf("\t    0.退出菜单\n\n")             ;
  86.                         printf("\t请选择:")                        ;
  87.                         scanf("%d" , & s)                          ;
  88.                         if(s >= 0 && s <= 3) break                 ;
  89.                         else printf("*无效选择*\n")                ;
  90.                 }                        
  91.                 flag = 0                                           ;
  92.                 printf("\n")                                       ;
  93.                 switch(s) {
  94.                         case 1 : printf("请输入要查询入库单号 :") ;
  95.                                  scanf("%s" , kudan1)              ;
  96.                                  for(i = 0 ; i < S ; i ++) {
  97.                                          if(! strcmp(goods[i] . kudan1 , kudan1)) {
  98.                                                  flag = 1                                                                                                     ;
  99.                                                  printf("入库单号  编号  名称  入库数量  成本\n")                                                             ;
  100.                                                  printf("%3s %3d %3s %3d %3f\n" , kudan1 , goods[i] . id , goods[i] . name , rk[i] . num , goods[i]. cost)    ;
  101.                                          }
  102.                                  }
  103.                                  if(flag == 0) printf("该单号不存在!\n")                                                                                     ;
  104.                                  break                                                                                                                        ;
  105.                         case 2: printf("请输入要查询出库单号 :") ;
  106.                                 scanf("%s", kudan2)               ;
  107.                                 for(i = 0 ; i < S ; i ++) {
  108.                                         if(! strcmp(goods[i] . kudan2 , kudan2)) {
  109.                                                 flag = 1                                                                                                      ;
  110.                                                 printf("出库单号  编号  名称  数量  利润\n")                                                                  ;
  111.                                                 goods[i].profit=goods[i].price-goods[i].cost;
  112.                                                 printf("%3s %3d %3s %3d %3f\n" , kudan2 , goods[i] . id , goods[i] . name , ck[i] . num  , goods[i] . profit) ;
  113.                                         }
  114.                                 }
  115.                                 if(flag == 0) printf("该单号不存在!\n")                                                                                      ;
  116.                                 break                                                                                                                         ;
  117.                         default: return                                                                                                                       ;
  118.                 }
  119.         }
  120. }

  121. void menu()
  122. {
  123.         int um                                         ;
  124.         for(;;) {
  125.                 for(;;) {
  126.                         printf("\n")                           ;
  127.                         printf("\t * [库存信息系统] *\n\n")    ;
  128.                         printf("\t   1. 商品入库\n")           ;
  129.                         printf("\t   2. 商品出库\n")           ;
  130.                         printf("\t   3. 信息查询\n")           ;
  131.                         printf("\t   0. 退出\n\n")             ;
  132.                         printf("\t  请选择 :")                ;
  133.                         scanf("%d" , & um)                     ;
  134.                         if(um >= 0 && um <= 3) break           ;
  135.                         else printf("*无效选择*\n")            ;
  136.                 }
  137.                 printf("\n")                                   ;
  138.                 switch(um) {
  139.                         case 1:
  140.                                 input()                        ;
  141.                                 break                          ;
  142.                         case 2:
  143.                                 output()                       ;
  144.                                 break                          ;
  145.                         case 3:
  146.                                 search()                       ;
  147.                                 break                          ;
  148.                         default: return                        ;
  149.                 }
  150.         }
  151. }

  152. int main()
  153. {
  154.         menu()                                                 ;
  155.         system("pause")                                        ;
  156.         return 0                                               ;
  157. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 05:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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