这C语言程序怎么错了,求高手解答,在线等......

2025-01-03 00:00:56
推荐回答(1个)
回答(1):

因为你定义函数:bool EmptyStack(StackSq *S);及void Push(struct StackSq *S,ElemType x);时
参数为(StackSq *)类型,而chelai()函数中你传递参数时使用的是(&S),而S定义为(struct StackSq *)型,
所以,你传递的参数类型为(struct StackSq **)与你定义的EmptyStack()函数及Push()函数要求的类型
不相符合.所以,chelai()函数中你应该改为:

//有车到来
void chelai(struct StackSq* S,struct QueueLk* HQ)
{
// int a;
ElemType laiche={0};

// a=EmptyStack(*S);
printf("请输入车辆的车牌号(如 京XX8888),及此刻时间(如 HH:MM):\n");
// scanf("%s",&laiche.chepai);
// scanf("%s",&laiche.lai);
// scanf("%s",&laiche.qu);
// laiche.chepai=getch();
// laiche.lai=getch();
// laiche.qu='\0';
gets(laiche.chepai);
gets(laiche.lai);

if(EmptyStack(S)==0)
{
printf("停车场尚有车位,可以驶入!\n");
Push(S,laiche);
}
else
{
if(S->top==N-1)
{
printf("停车场车位已满,请驶入便道等候!\n");
EnQueue(HQ,laiche);
}
else
{
printf("停车场尚有车位,可以驶入!\n");
Push(S,laiche);
}
}
}

==============================================
补充:
根据部分代码段目前还看不出什么地方出了错,如果可以的话,你把整个程序的代码全部贴出来吧.
==============================================
补充:
修改结果如下:

#include
#include
#include
#include
#include
#include

#define N 2

//车辆信息
struct che
{
char chepai[20];//车牌(要求格式 京XX8888)
char lai[6];//车到达时间(要求格式 HH:MM)
char qu[6];//车离开时间(要求格式 HH:MM)
};
typedef struct che ElemType;

//定义栈数据结构表示停车场
struct StackSq
{
ElemType* stack;
int top;
int MaxSize;
};
//用sNode数据结构表示便道上停放的车
struct sNode
{
ElemType data;
struct sNode *next;
};
//定义队列数据结构表示便道(使用struct sNode数据结构)
struct QueueLk
{
struct sNode *front;
struct sNode *rear;
};
//typedef struct che ElemType;
//=======================栈相关函数

//初始化栈,即置栈为空
void InitStack(struct StackSq* S)
{
S->MaxSize=N;
S->stack=(ElemType *)malloc(N*sizeof(ElemType));
S->top=-1;
}

//新元素进栈
void Push(struct StackSq* S,ElemType x)
{
// if(S->top==N-1)
// againMalloc(S);
S->top++;
S->stack[S->top]=x;
}

//删除栈顶元素
ElemType Pop(struct StackSq* S)
{
if(S->top==-1)
{
printf("栈空,无元素出栈!\n");
getchar();
exit(1);
}
S->top--;
return S->stack[S->top+1];
}

//判断S是否为空
int EmptyStack(struct StackSq* S)
{
if(S->top==-1)
return 1;
else
return 0;
}

//====END
//===================队列相关函数

//初始化链队
void InitQueue(struct QueueLk* HQ)
{
HQ->front=HQ->rear=NULL;
}

//检查链队是否为空
int EmptyQueue(struct QueueLk* HQ)
{
if(HQ->front==NULL)
return 1;
else
return 0;
}

//向链队中插入一个元素
void EnQueue(struct QueueLk* HQ,ElemType x)
{
struct sNode *newp;
newp=(sNode *)malloc(sizeof(struct sNode));
if(newp==NULL)
{
printf("内存动态空间用完,退出运行!\n");
exit(1);
}
newp->data=x;
newp->next=NULL;
if(HQ->rear==NULL)
HQ->front=HQ->rear=newp;
else
HQ->rear=HQ->rear->next=newp;
}

//从队列中删除一个元素
ElemType OutQueue(struct QueueLk* HQ)
{
struct sNode *p;
ElemType temp;
if(HQ->front==NULL)
{
printf("队列为空无法删除!\n");
exit(1);
}
temp=HQ->front->data;
p=HQ->front;
HQ->front=p->next;
if(HQ->front==NULL)
HQ->rear=NULL;
free(p);
return temp;
}

//====END

//显示开始菜单
void myprintf0()
{
printf("\n\n\n\n\n");
printf(" ================================================\n");
printf(" 停车场管理系统\n");
printf(" ================================================\n");
printf(" 1----有车到来\n");
printf(" 2----有车要走\n");
printf(" 3----查看停车场\n");
printf(" 4----收费设置\n");
printf(" 5----关 于\n");
printf(" 0----退 出\n");
printf(" ================================================\n");
printf(" 请选择:");
}

//有车到来
void chelai(struct StackSq &S,struct QueueLk* HQ)
{

ElemType laiche={0};

printf("请输入车辆的车牌号(如 京XX8888),及此刻时间(如 HH:MM):\n");

fflush(stdin);
printf("牌号=");
gets(laiche.chepai);
fflush(stdin);
printf("时间=");
gets(laiche.lai);

if(EmptyStack(&S)==1)
{
printf("停车场尚有车位,可以驶入!\n");
Push(&S,laiche);
printf("车牌:%s, 入场时间:%s",S.stack[0].chepai,S.stack[0].lai);
printf(" 位置:S.top=%d",S.top);

}
else
{
if(S.top==N-1)
{
printf("停车场车位已满,请驶入便道等候!\n");
EnQueue(HQ,laiche);
}
else
{
printf("停车场尚有车位,可以驶入!\n");
Push(&S,laiche);
// printf("grgfgfdg%s,%s",S.stack[0].chepai,S.stack[0].lai);
}
}
}

//有车要走
void chezou(struct StackSq &S,struct QueueLk* HQ)
{
int a=EmptyStack(&S),i=0,j=0;
struct StackSq temp;
ElemType zouche,t;

InitStack(&temp);

printf("请输入车辆的车牌号(如 京XX8888),及此刻时间(如 HH:MM):\n");

fflush(stdin);
printf("牌号=");
gets(zouche.chepai);
fflush(stdin);
printf("时间=");
gets(zouche.qu);

bool hadFound = false;

for(i=0;i {

while ( S.top > -1 )
{
t = Pop(&S);
if ( strcmp(t.chepai,zouche.chepai) == 0 )
{
hadFound = true;
if ( HQ->front != NULL )
{
t = OutQueue(HQ);
Push(&S,t);
}
break;
}
else
{
Push(&temp,t);
}
}

while ( temp.top > -1 )
{
t = Pop(&temp);
Push(&S,t);
}

break;
}

if ( ! hadFound )
{
printf("找不到该车!\n");
}
}

//查看停车场
void chakan(struct StackSq S,struct QueueLk* HQ)
{
int i=0,j=0;

printf("S.top=%d",S.top);
if(S.top!=-1)
{
for(i=0;i {
printf("车辆%s %s %s\n",S.stack[i].chepai,S.stack[i].lai,S.stack[i].qu);
}
}
}

int main()
{
char choose;
struct StackSq S;//停车场
// struct StackSq *Temp;//临时栈
struct QueueLk HQ;//便道
InitStack(&S);
printf("S.top= %d",S.top);
InitQueue(&HQ);
do
{
// system("cls");
myprintf0();
fflush(stdin);//////////////////冲洗缓冲区
choose=getchar();
printf("\n");
switch(choose)
{
case '1':chelai(S,&HQ);break;
case '2':chezou(S,&HQ);break;
case '3':chakan(S,&HQ);break;
// case '4':shezhi();break;
// case '5':guanyu();break;
case '0':{system("cls");printf("\n\n\n\n\n\n\n =======================================================\n 感谢使用本系统,已正常退出,按任意键结束!\n =======================================================\n\n\n\n ");};exit(0);
default :{printf(" %c为非法选项,请重新输入!按任意键继续!\n ",choose);getchar();};
}
}while(choose!='0');
}