鱼C论坛

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

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

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

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

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

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

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

struct Goods
{
        int id;//产品编号
        char kudan1;//入库单号 
        char kudan2;//出库单号 
        char name;//名称
        int num;//数量
        float cost;//成本
        float price;//售价 
        float profit;//利润 
                
}goods[50],rk,ck,cx;


void input();       
void output(); 
void search();
void menu(); 

int main(){

        int command = 0;  //command用于存储管理员命令对应的菜单数字 
        int a = 1;      //用于判断是否退出系统 
        while(a){       //利用while循环实现对管理系统进行多种操作 
            printf("1.入库2.出库3.查询\n");
            printf("请输入操作对应的数字!\n\n");
            scanf("%d", &command);
                switch(command){
                    case(1):        //进库 
                            input();
                            break;
                    case(2):        //出库 
                            output();
                        break;
                    case(3):        //查询库存 
                            search(); 
                        break;
            
                    default:
                            printf("请输入正确的数字!\n\n");   //提示管理员重新输入正确的菜单数字 
                             break;
            }
        }
        printf("您已退出可口可乐广东分公司仓库管理系统!");   //提示管理员成功退出系统 
        return 0;
} 


int S=0;//产品种类 
void input()//入库 
{
        int a,i=0,j=0;
        printf("请输入入库产品种类:\n");
        scanf("%d",&a);
        for(j=0;j<a;j++)
        {        printf("请输入第%d个产品信息\n",(j+1));
            printf("产品名称:");
        scanf("%s",&goods[i].name);                
            printf("产品编号:");
            scanf("%d",&goods[i].id);
            printf("例:2022年1月填为202201\n");
                printf("入库单号:\n");
                scanf("%s",&goods[i].kudan1);
                printf("数量:");
                scanf("%d",&goods[i].num);
                printf("请再输入一次\n");
                scanf("%d",&rk.num);

                int flag = 0;  
        for(i = 0; i <S; i++)
                {  
                if(rk.id==goods[i].id)
                        {flag = 1;
                        goods[i].num =rk.num+goods[i].num;
                        break;
                    }
                }
                    if (flag == 0)
                        {
                S++;
                }
        }                
}

void output()//出库 
{
        int b,j=0,i=0;
    printf("请输入本次出库产品种类数:\n"); 
    scanf("%d", &b);
    for(j=0;j<b;j++)
        {
                printf("请输入出库单号\n");
                scanf("%s",&goods[i].kudan2);
        printf("\n请输入第%d个产品编号:\n",(j+1));
        scanf("%d",&ck.id);
        printf("请输入出库数量:\n");
        scanf("%d",&ck.num);
        int flag=0;
        for(i=0;i<S;i++)
                {
                int t=0;
                if(ck.id==goods[i].id)
                        {
                            flag=1;
                            if(goods[i].num==ck.num)
                                {
                                        printf("库存清零\n");
                            S--;
                        }
                        else if((goods[i].num-ck.num)<0)
                        printf("库存不足,出库失败\n");
                        else
                        {
                                goods[i].num=(goods[i].num-ck.num);
                                printf("出库成功\n");
                                }
                                break;
                    }
        }
        }
}

void search()
{
        int i,s,flag;
        printf("1.查询入库单\n");
        printf("2.查询出库单\n");
        printf("3.退出菜单\n");
        while(1){
        printf("请选择编号:");
    scanf("%d",&s);
    flag=0;
    switch(s){
        case 1:
        printf("请输入要查询的入库单号:\n");
    scanf("%d",&cx.kudan2);
    for(i=0;i<S;i++)
        if(goods[i].kudan1==cx.kudan1){
        flag=1;
        printf("出库单号  编号  名称  数量  成本\n");
        printf("%d%d%s%d%f\n",goods[1].kudan1,goods[i].id ,goods[i].name ,goods[i].num ,goods[i].cost);}
    if(flag=0)
        printf("该单号不存在!\n");
    break;
        case 2:
        printf("请输入要查询出库单号:\n");
    scanf("%d",&cx.kudan2);
    for(i=0;i<S;i++)
        if(goods[i].kudan2==cx.kudan2){
        flag=1;
        printf("出库单号  编号  名称  数量  利润\n");
        goods[i].profit=(goods[i].price-goods[i].cost)*ck.num;
        printf("%d%d%s%d%f\n",goods[1].kudan2,goods[i].id ,goods[i].name ,goods[i].num ,goods[i].profit);}
    if(flag=0)
        printf("该单号不存在!\n");
    break;
    case 3:
    return;
        default:
                printf("ddd");
                break;
        }
  }
}
  
最佳答案
2022-11-11 00:34:01
本帖最后由 jackz007 于 2022-11-11 00:46 编辑
爱喝的三明治 发表于 2022-11-11 00:14
所以功能3中为什么有问题啊?


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

使用道具 举报

发表于 2022-11-10 23:55:43 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-11 00:05 编辑
struct Goods
{
        int id;//产品编号
        char kudan1[256] ; //【修改】:字符串是需要很多字符空间的 
        char kudan2[256] ; //【修改】:字符串是需要很多字符空间的  
        char name[256] ; //【修改】:字符串是需要很多字符空间的 
        int num;//数量
        float cost;//成本
        float price;//售价 
        float profit;//利润 
}goods[50],rk[20],ck[20],cx[90];
        你的定义 kudan1、kudan2、name 只能存储 1 个字符,真的够用吗???

        你的代码逻辑非常的混乱,不知道数据、功能是如何组织和规划的,比如,goods[50],rk[20],ck[20],cx[90]; 这些都是干什么用的,彼此之间什么关系?有没有可能根本不需要这么多账本???账本可是结构数组,搞一个不够使,一定要搞那么多,真的有必要吗,要知道,账本多了容易混乱!!!
想知道小甲鱼最近在做啥?请访问 -> 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)这种运行,我也想不到其他办法了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

        你的代码逻辑 ...

所以功能3中为什么有问题啊?
想知道小甲鱼最近在做啥?请访问 -> 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() 函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

struct Goods
{
        int id           ; //产品编号
        char kudan1[256] ; //入库单号 
        char kudan2[256] ; //出库单号 
        char name[256]   ; //名称
        int num          ; //数量
        float cost       ; //成本
        float price      ; //售价 
        float profit     ; //利润 
} goods[50] , rk[20] , ck[20] , cx[90] ;

int S = 0 ; //产品种类 

void input()//入库 
{
        int a , i = 0 , j = 0                                         ;
        printf("请输入入库产品种类数:")                              ;
        scanf("%d" , & a)                                             ;
        for(i = 0 ; i < a ; i ++) {
                printf("请输入第 %d 个产品信息\n" , i + 1)            ;
                printf("产品名称:")                                  ;
                scanf("%s" , goods[i] . name)                         ;
                printf("产品编号:")                                  ;
                scanf("%d", & goods[i] . id)                          ;
                printf("入库单号 (例:2022年1月填为202201) :")       ;
                scanf("%s", goods[i] . kudan1)                        ;
                printf("数量:")                                      ;
                scanf("%d" , & goods[i] . num)                        ;
                rk[i].num = goods[i] . num                            ;
        }
        int flag = 0                                                  ;
        for(i = 0 ; i < S ; i ++) {  
                if(rk[i] . id == goods[i] . id) {
                        flag = 1                                      ;
                        goods[i] . num = rk[i] . num + goods[i] . num ;
                        break                                         ;
                }
        }
        if (flag == 0) S ++                                           ;
}

void output()//出库 
{
        int b , j = 0 , i = 0 , t , flag                     ;
        printf("请输入本次出库产品种类数:")                 ;
        scanf("%d" , & b)                                    ;
        for(i = 0 ; i < b ; i ++) {
                printf("请输入出库单号:")                   ;
                scanf("%s" ,  goods[i] . kudan2)             ;
                printf("\n")                                 ;
                printf("请输入第 %d 个产品编号:" , (i + 1)) ;
                scanf("%d" , & ck[i] . id)                   ;
                printf("请输入出库数量:")                   ;
                scanf("%d", & ck[i] . num)                   ;
        }
        flag = 0                                             ;
        for(i = 0 ; i < S ; i ++) {
                t = 0                                        ;
                if(ck[i] . id == goods[i] . id) {
                        flag = 1                             ;
                        if(goods[i] . num == ck[i] . num) {
                                printf("库存清零\n")         ;
                                S --                         ;
                        } else if((goods[i] . num - ck[i] . num) < 0) {
                                printf("库存不足,出库失败\n") ;
                        } else {
                                goods[i] . num = (goods[i] . num - ck[i] . num) ;
                                printf("出库成功\n")                            ;
                        }
                        break                                                   ;
                }
        }
}

void search()
{
        int i , s , flag                                           ;
        char kudan1[256] , kudan2[256]                             ;
        while(1) {
                for(;;) {
                        printf("\n")                               ;
                        printf("\t    * [信息查询] * \n\n")        ;
                        printf("\t    1.查询入库单\n")             ;
                        printf("\t    2.查询出库单\n")             ;
                        printf("\t    0.退出菜单\n\n")             ;
                        printf("\t请选择:")                        ;
                        scanf("%d" , & s)                          ;
                        if(s >= 0 && s <= 3) break                 ;
                        else printf("*无效选择*\n")                ;
                }                        
                flag = 0                                           ;
                printf("\n")                                       ;
                switch(s) {
                        case 1 : printf("请输入要查询入库单号 :") ;
                                 scanf("%s" , kudan1)              ;
                                 for(i = 0 ; i < S ; i ++) {
                                         if(! strcmp(goods[i] . kudan1 , kudan1)) {
                                                 flag = 1                                                                                                     ;
                                                 printf("入库单号  编号  名称  入库数量  成本\n")                                                             ;
                                                 printf("%3s %3d %3s %3d %3f\n" , kudan1 , goods[i] . id , goods[i] . name , rk[i] . num , goods[i]. cost)    ;
                                         }
                                 }
                                 if(flag == 0) printf("该单号不存在!\n")                                                                                     ;
                                 break                                                                                                                        ;
                        case 2: printf("请输入要查询出库单号 :") ;
                                scanf("%s", kudan2)               ;
                                for(i = 0 ; i < S ; i ++) {
                                        if(! strcmp(goods[i] . kudan2 , kudan2)) {
                                                flag = 1                                                                                                      ;
                                                printf("出库单号  编号  名称  数量  利润\n")                                                                  ;
                                                goods[i].profit=goods[i].price-goods[i].cost;
                                                printf("%3s %3d %3s %3d %3f\n" , kudan2 , goods[i] . id , goods[i] . name , ck[i] . num  , goods[i] . profit) ;
                                        }
                                }
                                if(flag == 0) printf("该单号不存在!\n")                                                                                      ;
                                break                                                                                                                         ;
                        default: return                                                                                                                       ;
                }
        } 
}

void menu()
{
        int um                                         ;
        for(;;) {
                for(;;) {
                        printf("\n")                           ;
                        printf("\t * [库存信息系统] *\n\n")    ;
                        printf("\t   1. 商品入库\n")           ;
                        printf("\t   2. 商品出库\n")           ;
                        printf("\t   3. 信息查询\n")           ;
                        printf("\t   0. 退出\n\n")             ;
                        printf("\t  请选择 :")                ;
                        scanf("%d" , & um)                     ;
                        if(um >= 0 && um <= 3) break           ;
                        else printf("*无效选择*\n")            ;
                }
                printf("\n")                                   ;
                switch(um) {
                        case 1:
                                input()                        ;
                                break                          ;
                        case 2:
                                output()                       ;
                                break                          ;
                        case 3:
                                search()                       ;
                                break                          ;
                        default: return                        ;
                }
        }
}

int main()
{
        menu()                                                 ;
        system("pause")                                        ;
        return 0                                               ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 08:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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