问题描述
- C++程序编译出错,帮忙修改,可以的话,把修改后的完整程序发上来
-
#include
#include
#include
#define max 5
typedef struct{
char b;//存储商品名
//商品日期年、月、日
int year;
int month;
int day;
}Data;
typedef struct{
Data a[max];//0为栈底位置
int top;//栈顶
}Stack;
//初始化空栈
Stack *initstack(){
Stack *S;
S=(Stack *)malloc(sizeof(Stack));//申请空间 //判断是否申请到栈空间
if(!S){
printf("空间不足!n");
return NULL;}
else{
S->top=-1;
return S;}}//将货架上摆放的货物打印出来
void Print(Stack *S){
printf(“这个商品的货架上摆放了%d个货物n",S->a[S->top].b,S->top+1); while(S->top>-1){
printf("%c%d/%d/%dn",S->a[S->top].b,S->a[S->top].year,S->a[S->top].month,S->a[S->top].day);
S->top--;}}
//上货
Stack *onput(Stack *S){
int j;char k1;
int k2,k3,k4;
for(j=0;j
if(S->top==max-1){
printf("栈满!n");//栈满不能入栈
return S;}
S->top++;
printf("栈数%d ",S->top);
//输入商品名和生产日期
fflush(stdin);//清除缓存区
scanf("%c %d/%d/%d",&k1,&k2,&k3,&k4);
S->a[S->top].b=k1;
S->a[S->top].year=k2;
S->a[S->top].month=k3;
S->a[S->top].day=k4;}
printf("该商品的货架满了!n");
printf("此时该商品的货架上共有%d个商品nn",S->top+1);
return S;}
//倒货
Stack *outstack(Stack *S,Stack *L){
L->top++;
L->a[L->top]=S->a[S->top];
S->top--;
printf("此时的栈顶数为:%dn",S->top);
printf("倒货一次!nn");
return L;}
//补货
void backstack(Stack *S,int x){
int i,ii;
int temp;
char k1;//储存商品名
int k2,k3,k4;//储存生产日期分别对应年月日
Stack *L;
L=initstack();//重新申请一个空栈用来倒货时存放货物
printf("请输入要补上货架的商品名(一个字符)空一格并输入该商品生产日期(年/月/日)每上货一件以回车键结束:n");
for(i=1;i<=x;i++){
//输入商品名和生产日期
fflush(stdin);//清除缓存区
scanf("%c %d/%d/%d",&k1,&k2,&k3,&k4);
if(S->top==-1){//此时货架上无商品可以直接上货
S->top++;
S->a[S->top].b=k1;
S->a[S->top].year=k2;
S->a[S->top].month=k3;
S->a[S->top].day=k4;
printf("补货成功第%d件!n",i);
printf("此时的栈顶数为:%dn",S->top);}
else{
if(k2a[S->top].year){
//若生产年份要补上货架的比货架上的早则直接上货架
S->top++;
S->a[S->top].b=k1;
S->a[S->top].year=k2;
S->a[S->top].month=k3;
S->a[S->top].day=k4;
printf("补货成功第%d件!n",i);
printf("此时的栈顶数为:%dn",S->top);
temp=1;}
else{for(ii=S->top;ii>-1&&S->top!=-1;ii--){
temp=0;//用来标记是否有货物上架
if(k2==S->a[S->top].year){
//若生产年份要补上货架的与货架上的一样则比较月份
if(k3a[S->top].month){
//若生产月份要补上货的比货架上的早则直接上货
S->top++;
S->a[S->top].b=k1;
S->a[S->top].year=k2;
S->a[S->top].month=k3;
S->a[S->top].day=k4;
printf("补货成功第%d件!n",i);
printf("此时的栈顶数为:%dn",S->top);
temp=1;
if(temp==1)break;}
else{
if(k3==S->a[S->top].month){
//若生产月份要补上货架的与货架上的一样则比较生产当天日期
if(k4<=S->a[S->top].day){
//若生产当天日期要补上货的比货架上的早或是相同则直接上货否则要倒货重新上货架
S->top++;
S->a[S->top].b=k1;
S->a[S->top].year=k2;
S->a[S->top].month=k3;
S->a[S->top].day=k4;
printf("补货成功第%d件!n",i);
printf("此时的栈顶数为:%dn",S->top);
temp=1;
if(temp==1)break;}
else{//倒货L=outstack(S,L);}}
else{//倒货L=outstack(S,L);}}}
if(k2>S->a[S->top].year){//此时生产年份要补上货架的比货架上的近
L=outstack(S,L);}//倒货
if(temp==0){
S->top++;
S->a[S->top].b=k1;
S->a[S->top].year=k2;
S->a[S->top].month=k3;
S->a[S->top].day=k4;
printf("补货成功第%d件!n",i);
printf("此时的栈顶数为:%dn",S->top);}
while(L->top>-1){//将存储在L栈中的商品上架
S->top++;
S->a[S->top]=L->a[L->top--];}
L=initstack();}}}
printf("补货完成!!nn");
Print(S);}
//出货
void *outpush(Stack *S){
printf("请店主输入今天%c这个商品销售出去的数量:",S->a[S->top].b); int x,i;fflush(stdin);
do{fflush(stdin);
scanf("%d",&x);
if(x>max)
printf("该货架上没有这么多商品!请重输!n");
}while(x>max);
for(i=1;i<=x;i++)S->top--;
printf("此时%c这个商品的货架的数量剩下%d件需要补上货架的数量为%dnn",S->a[S->top].b,S->top+1,x);
//补货
backstack(S,x);}
int main(void){
Stack *s[5];//5种商品
int i;
printf("计算机科学与技术1班 丁逸悦 学号:1308010108nn");
printf("商店共有5种商品,分别是a,b,c,d,enn");
for(i=0;i<5;i++){
s[i]=initstack();//初始化栈
printf("请输入要上货的第%d种商品名(一个字符)空一格并输入该商品生产日期(年/月/日)每上货一件以回车键结束:n",i+1);
s[i]=onput(s[i]);}//将商品入栈(上货)
char c,yes_no;
do{
fflush(stdin);
printf("请店主输入今天有销售出去一个商品的商品名:n");
fflush(stdin);
scanf("%c",&c);
switch(c){
case 'a':outpush(s[0]);break;
case 'b':outpush(s[1]);break;
case 'c':outpush(s[2]);break;
case 'd':outpush(s[3]);break;
case 'e':outpush(s[4]);break;
default:printf("商店无%c此商品!输入错误!n",c);}
do{fflush(stdin);
printf("请问店主还有销售出去的商品么?如果有请按Y,否则按Nn"); yes_no=getchar();
if(yes_no!='Y'&&yes_no!='N'){
printf("输入错误!!!nn");}
}while(yes_no!='Y'&&yes_no!='N');
}while(yes_no=='Y');
return 0;}
解决方案
Stack在哪里定义的,代码都不全。
解决方案二:
看错了
printf(“这个商品的货架上摆放了%d个货物n",S->a[S->top].b,S->top+1); while(S->top>-1){
这里第一个引号都是全角的。
还有好多错误。
解决方案三:
else{//倒货L=outstack(S,L);}}
else{//倒货L=outstack(S,L);}}}
这里else都不配对,什么乱七八糟的,缩进也没有。
解决方案四:
把代码放到代码片里。
解决方案五:
好乱,你可以把错误信息顺便贴出来就更好了
解决方案六:
这种错误自己可以找出来的就慢慢找,慢慢调试,这也是一种能力,谁有那么多工夫去看你这么乱的代码
解决方案七:
#if 1
#include
#include
#define max 5
typedef struct{
char b;//存储商品名
//商品日期年、月、日
int year;
int month;
int day;
}Data;
typedef struct{
Data a[max];//0为栈底位置
int top;//栈顶
}Stack;
//初始化空栈
Stack *initstack(){
Stack *S;
S = (Stack *)malloc(sizeof(Stack));//申请空间 //判断是否申请到栈空间
if (!S){
printf("空间不足!n");
return NULL;
}
else{
S->top = -1;
return S;
}
}
//将货架上摆放的货物打印出来
void Print(Stack *S)
{
printf("这个商品的货架上摆放了%d个货物n",S->a[S->top].b,S->top+1);
while(S->top>-1)
{
printf("%c%d/%d/%dn", S->a[S->top].b, S->a[S->top].year, S->a[S->top].month, S->a[S->top].day);
S->top--;
}
}
//上货
Stack *onput(Stack *S)
{
int j; char k1;
int k2, k3, k4;
for (j = 0; j < S->top; j++)
{
if(S->top == max - 1)
{
printf("栈满!n");//栈满不能入栈
return S;
}
S->top++;
printf("栈数%d ", S->top);
//输入商品名和生产日期
fflush(stdin);//清除缓存区
scanf_s("%c %d/%d/%d", &k1, &k2, &k3, &k4);
S->a[S->top].b = k1;
S->a[S->top].year = k2;
S->a[S->top].month = k3;
S->a[S->top].day = k4;
}
printf("该商品的货架满了!n");
printf("此时该商品的货架上共有%d个商品nn", S->top + 1);
return S;
}
//倒货
Stack *outstack(Stack *S, Stack *L)
{
L->top++;
L->a[L->top] = S->a[S->top];
S->top--;
printf("此时的栈顶数为:%dn", S->top);
printf("倒货一次!nn");
return L;
}
//补货
void backstack(Stack *S, int x)
{
int i, ii;
int temp;
char k1;//储存商品名
int k2, k3, k4;//储存生产日期分别对应年月日
Stack *L;
L = initstack();//重新申请一个空栈用来倒货时存放货物
printf("请输入要补上货架的商品名(一个字符)空一格并输入该商品生产日期(年/月/日)每上货一件以回车键结束:n");
for (i = 1; i <= x; i++)
{
//输入商品名和生产日期
fflush(stdin);//清除缓存区
scanf_s("%c %d/%d/%d", &k1, &k2, &k3, &k4);
if (S->top == -1)
{//此时货架上无商品可以直接上货
S->top++;
S->a[S->top].b = k1;
S->a[S->top].year = k2;
S->a[S->top].month = k3;
S->a[S->top].day = k4;
printf("补货成功第%d件!n", i);
printf("此时的栈顶数为:%dn", S->top);
}
else
{
if (S->a[S->top].year)
{
//若生产年份要补上货架的比货架上的早则直接上货架
S->top++;
S->a[S->top].b = k1;
S->a[S->top].year = k2;
S->a[S->top].month = k3;
S->a[S->top].day = k4;
printf("补货成功第%d件!n", i);
printf("此时的栈顶数为:%dn", S->top);
temp = 1;
}
else
{
for (ii = S->top; ii > -1 && S->top != -1; ii--)
{
temp = 0;//用来标记是否有货物上架
if (k2 == S->a[S->top].year)
{
//若生产年份要补上货架的与货架上的一样则比较月份
if (S->a[S->top].month)
{
//若生产月份要补上货的比货架上的早则直接上货
S->top++;
S->a[S->top].b = k1;
S->a[S->top].year = k2;
S->a[S->top].month = k3;
S->a[S->top].day = k4;
printf("补货成功第%d件!n", i);
printf("此时的栈顶数为:%dn", S->top);
temp = 1;
if (temp == 1)break;
}
else
{
if (k3 == S->a[S->top].month)
{
//若生产月份要补上货架的与货架上的一样则比较生产当天日期
if (k4 <= S->a[S->top].day)
{
//若生产当天日期要补上货的比货架上的早或是相同则直接上货否则要倒货重新上货架
S->top++;
S->a[S->top].b = k1;
S->a[S->top].year = k2;
S->a[S->top].month = k3;
S->a[S->top].day = k4;
printf("补货成功第%d件!n", i);
printf("此时的栈顶数为:%dn", S->top);
temp = 1;
if (temp == 1)break;
}
//else{倒货L=outstack(S,L);}}
else
{//倒货L=outstack(S,L);}}}
if (k2 > S->a[S->top].year)
{//此时生产年份要补上货架的比货架上的近
L = outstack(S, L);
}//倒货
if (temp == 0)
{
S->top++;
S->a[S->top].b = k1;
S->a[S->top].year = k2;
S->a[S->top].month = k3;
S->a[S->top].day = k4;
printf("补货成功第%d件!n", i);
printf("此时的栈顶数为:%dn", S->top);
}
while (L->top > -1)
{//将存储在L栈中的商品上架
S->top++;
S->a[S->top] = L->a[L->top--];
}
L = initstack();
}
}
}
printf("补货完成!!nn");
Print(S);
}
}
}
}
}
}
//出货
void *outpush(Stack *S)
{
printf("请店主输入今天%c这个商品销售出去的数量:", S->a[S->top].b); int x, i; fflush(stdin);
do{
fflush(stdin);
scanf_s("%d", &x);
if (x>max)
printf("该货架上没有这么多商品!请重输!n");
} while (x>max);
for (i = 1; i <= x; i++)S->top--;
printf("此时%c这个商品的货架的数量剩下%d件需要补上货架的数量为%dnn", S->a[S->top].b, S->top + 1, x); //补货
backstack(S, x);
return NULL;
}
int main(void)
{
Stack *s[5];//5种商品
int i;
printf("计算机科学与技术1班 丁逸悦 学号:1308010108nn");
printf("商店共有5种商品,分别是a,b,c,d,enn");
for (i = 0; i<5; i++){
s[i] = initstack();//初始化栈
printf("请输入要上货的第%d种商品名(一个字符)空一格并输入该商品生产日期(年/月/日)每上货一件以回车键结束:n", i + 1);
s[i] = onput(s[i]);
}//将商品入栈(上货)
char c, yes_no;
do{
fflush(stdin);
printf("请店主输入今天有销售出去一个商品的商品名:n");
fflush(stdin);
scanf_s("%c", &c);
switch (c){
case 'a':outpush(s[0]); break;
case 'b':outpush(s[1]); break;
case 'c':outpush(s[2]); break;
case 'd':outpush(s[3]); break;
case 'e':outpush(s[4]); break;
default:printf("商店无%c此商品!输入错误!n", c);
}
do{
fflush(stdin);
printf("请问店主还有销售出去的商品么?如果有请按Y,否则按Nn"); yes_no = getchar();
if (yes_no != 'Y'&&yes_no != 'N'){
printf("输入错误!!!nn");
}
} while (yes_no != 'Y'&&yes_no != 'N');
} while (yes_no == 'Y');
return 0;
}
#endif