陷入循环,无法输出数据
本帖最后由 爱喝的三明治 于 2022-11-11 00:02 编辑printf不输出数据
问题出在133和138行之间无线循环
无法输出
在查询这个功能里没办法输出数据
实在是找不到问题在哪里,没有一点头绪{:9_225:}
#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,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.name);
printf("产品编号:");
scanf("%d",&goods.id);
printf("例:2022年1月填为202201\n");
printf("入库单号:\n");
scanf("%s",&goods.kudan1);
printf("数量:");
scanf("%d",&goods.num);
printf("请再输入一次\n");
scanf("%d",&rk.num);
int flag = 0;
for(i = 0; i <S; i++)
{
if(rk.id==goods.id)
{flag = 1;
goods.num =rk.num+goods.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.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.id)
{
flag=1;
if(goods.num==ck.num)
{
printf("库存清零\n");
S--;
}
else if((goods.num-ck.num)<0)
printf("库存不足,出库失败\n");
else
{
goods.num=(goods.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.kudan1==cx.kudan1){
flag=1;
printf("出库单号编号名称数量成本\n");
printf("%d%d%s%d%f\n",goods.kudan1,goods.id ,goods.name ,goods.num ,goods.cost);}
if(flag=0)
printf("该单号不存在!\n");
break;
case 2:
printf("请输入要查询出库单号:\n");
scanf("%d",&cx.kudan2);
for(i=0;i<S;i++)
if(goods.kudan2==cx.kudan2){
flag=1;
printf("出库单号编号名称数量利润\n");
goods.profit=(goods.price-goods.cost)*ck.num;
printf("%d%d%s%d%f\n",goods.kudan2,goods.id ,goods.name ,goods.num ,goods.profit);}
if(flag=0)
printf("该单号不存在!\n");
break;
case 3:
return;
default:
printf("ddd");
break;
}
}
}
本帖最后由 jackz007 于 2022-11-11 00:05 编辑
struct Goods
{
int id;//产品编号
char kudan1 ; //【修改】:字符串是需要很多字符空间的
char kudan2 ; //【修改】:字符串是需要很多字符空间的
char name ; //【修改】:字符串是需要很多字符空间的
int num;//数量
float cost;//成本
float price;//售价
float profit;//利润
}goods,rk,ck,cx;
你的定义 kudan1、kudan2、name 只能存储 1 个字符,真的够用吗???
你的代码逻辑非常的混乱,不知道数据、功能是如何组织和规划的,比如,goods,rk,ck,cx; 这些都是干什么用的,彼此之间什么关系?有没有可能根本不需要这么多账本???账本可是结构数组,搞一个不够使,一定要搞那么多,真的有必要吗,要知道,账本多了容易混乱!!! jackz007 发表于 2022-11-10 23:55
你的定义 kudan1、kudan2、name 只能存储 1 个字符,真的够用吗???
你的代码逻辑 ...
rk,ck这些是为了让if(goods.kudan1==cx.kudan1)这种运行,我也想不到其他办法了 jackz007 发表于 2022-11-10 23:55
你的定义 kudan1、kudan2、name 只能存储 1 个字符,真的够用吗???
你的代码逻辑 ...
所以功能3中为什么有问题啊? 本帖最后由 jackz007 于 2022-11-11 00:46 编辑
爱喝的三明治 发表于 2022-11-11 00:14
所以功能3中为什么有问题啊?
你的数据结构模型都是错的,功能怎么能正确?比如,kudan1、kudan2 有何用?为什么一定要用字符串?用整型数就不行吗,既然是库存信息,用一个唯一性的库存编号还不能解决问题?
search() 函数判断 kudan1、kudan2 与需要查询的库单号是否相同用的是== ,那样做不可以,它们是字符串,判断相等得用 strcmp() 函数。 本帖最后由 jackz007 于 2022-11-11 09:53 编辑
只是排除了逻辑障碍,不能保证业务逻辑正确
#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 , rk , ck , cx ;
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 . name) ;
printf("产品编号:") ;
scanf("%d", & goods . id) ;
printf("入库单号 (例:2022年1月填为202201) :") ;
scanf("%s", goods . kudan1) ;
printf("数量:") ;
scanf("%d" , & goods . num) ;
rk.num = goods . num ;
}
int flag = 0 ;
for(i = 0 ; i < S ; i ++) {
if(rk . id == goods . id) {
flag = 1 ;
goods . num = rk . num + goods . 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 . kudan2) ;
printf("\n") ;
printf("请输入第 %d 个产品编号:" , (i + 1)) ;
scanf("%d" , & ck . id) ;
printf("请输入出库数量:") ;
scanf("%d", & ck . num) ;
}
flag = 0 ;
for(i = 0 ; i < S ; i ++) {
t = 0 ;
if(ck . id == goods . id) {
flag = 1 ;
if(goods . num == ck . num) {
printf("库存清零\n") ;
S -- ;
} else if((goods . num - ck . num) < 0) {
printf("库存不足,出库失败\n") ;
} else {
goods . num = (goods . num - ck . num) ;
printf("出库成功\n") ;
}
break ;
}
}
}
void search()
{
int i , s , flag ;
char kudan1 , kudan2 ;
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 . kudan1 , kudan1)) {
flag = 1 ;
printf("入库单号编号名称入库数量成本\n") ;
printf("%3s %3d %3s %3d %3f\n" , kudan1 , goods . id , goods . name , rk . num , goods. cost) ;
}
}
if(flag == 0) printf("该单号不存在!\n") ;
break ;
case 2: printf("请输入要查询出库单号 :") ;
scanf("%s", kudan2) ;
for(i = 0 ; i < S ; i ++) {
if(! strcmp(goods . kudan2 , kudan2)) {
flag = 1 ;
printf("出库单号编号名称数量利润\n") ;
goods.profit=goods.price-goods.cost;
printf("%3s %3d %3s %3d %3f\n" , kudan2 , goods . id , goods . name , ck . num, goods . 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 ;
}
页:
[1]