下个这个程序 运行没错 ,但是停车场出车的时候总是检测不到车辆!! 不知道是怎么回事,希望各位老师 师兄 师姐 指点!!!! 我明天要交程序了 急啊··· 谢了#include <stdio.h>
#include <stdlib.h>
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define STACK_INIT_SIZE 2
typedef struct
{
int id;
float time;
}Car1,Car2;
typedef struct
{
Car1 *fcar;
Car1 *lcar;
int stacksize;
}SqStack1;//停车场
typedef struct
{
Car2 *fcar;
Car2 *lcar;
int stacksize;
}SqStack2;//备用停车场
typedef struct QNode
{
Car2 date;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
int main()
{
int choice1=1;
int i,choice,carw=1;
float time,money;
SqStack1 S3;
SqStack2 S4;
LinkQueue Q;
Car1 car1_A,car1_B,car1_C;
InitStack1(&S3);
InitStack2(&S4);
InitQueue(&Q);
while(choice1==1)
{
fflush(stdin);
system("cls");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^/n");
printf(" *** 欢迎来到XX停车场 ***/n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^/n");
printf(" 请按键选择:/n 1 进入停车场/n 2 离开停车场/n 0 退出系统/n");
scanf("%d",&choice);
if(choice!=1 && choice!=2 && choice!=0)
{
printf("对不起,您的输入有误!请确认后重新输入!/n");
}
else
{
printf("选择成功/n");
switch(choice)
{
case 1:
printf(" 请输入您的车牌号:/n");
printf("ID:");
scanf("%d",&car1_A.id);
printf(" 请输入您的入场时间:/n");
printf("时间:");
scanf("%f",&car1_A.time);
if(!StackFull1(S3))
{
Push1(&S3,car1_A);
printf("*******************XX停车场停车凭据************************/n");
printf(" * */n");
printf(" * 你的车牌是:%d */n",car1_A.id);
printf(" * 进入时间是:%.2f */n",car1_A.time);
printf(" * 您的车的位子是:%d */n",carw);
printf(" * 2009年9月12日*/n");
printf(" * */n");
printf("************************************************************/n");
carw++;
}
else
{
printf("停车场已满,请停入临时车道,待主停车场有空位将及时讲您的车移入主停车场./n");
EnQueue(&Q, car1_A);
printf("……");
printf("您已成功停入本停车场临时车道/n");
}
break;
case 2:
printf ("输入你要开走的车的车牌ID和时间/n");
printf("ID:");
scanf("%d",&car1_B.id);
printf("/n");
printf("时间:");
scanf("%f",&car1_B.time);
printf("/n");
//do
//{
//Pop1(&S3,&car1_C); /*出站*/
//if(car1_B.id!=car1_C.id)
//Push2(&S4,car1_C); /*进备用站*/
//else
// car1_A.time=car1_C.time;
//}while(car1_B.id!=car1_C.id);
for(i=0;i<=3;i++)
{
Pop1(&S3,&car1_C);
if(car1_B.id==car1_C.id)
{
printf("找到您要的车辆/n");
printf("*****************XX停车场清单*********************************/n");
printf("你的车牌是%d",car1_B.id);
printf("你的入场时间:%f/n 你离开时间是%f/n",car1_C.time,car1_B.time);
time=car1_B.time-car1_A.time;
money=time*2;
printf("你总共用时间%f/n",time);
printf("你需缴纳的停车费为%f",money);
printf("欢迎下次再来!/n");
}
else
Push2(&S4, car1_C);
// printf("停入备用车道/n");
}
if(car1_B.id!=car1_C.id && StackEmpty1(S3))
{
printf("抱歉,没有找到您要的车辆.请确认您的车牌号码是否有误!/n");
}
while(!StackEmpty2(S4))
{
Pop2(&S4,car1_C);
Push1(&S3,car1_C);
}
while(!QueueEmpty(Q)&&!StackFull1(S3))
{
DeQueue(&Q,&car1_C);
if(!StackFull1(S3))
{
Push1(&S3,car1_C);
}
}
break;
case 0:
break;
}
}
printf("是否继续? 请选择:1 继续 0 退出/n");
scanf("%d",&choice1);
if(!choice1==1)
{
printf("########欢迎下次再来!########/n");
exit(0);
}
}
return 0;
}
int InitStack1 (SqStack1 *S1)
{
(*S1).fcar=(Car1 *) malloc(STACK_INIT_SIZE * sizeof (Car1));
if (!(*S1).fcar) exit (OVERFLOW);
(*S1).lcar=(*S1).fcar;
(*S1).stacksize=STACK_INIT_SIZE;
return OK;
}//构建空栈为停车场
int StackEmpty1(SqStack1 S1)
{
if (S1.fcar==S1.lcar)
return OK;
}
int StackFull1(SqStack1 S1) /*查看停车厂是否已满*/
{
if(S1.lcar-S1.fcar>=STACK_INIT_SIZE) /*若栈顶与栈底之差大于等于栈的最大存储空间,则已满*/
return OK;
else
return ERROR;
}
int Push1(SqStack1 *S1,Car1 e)
{
if ((*S1).lcar -(*S1).fcar >=STACK_INIT_SIZE)
return OVERFLOW;
else
{
*(*S1).lcar++=e;
return OK;
}
}//停入停车场
int Pop1(SqStack1 *S1,Car1 *e)
{
if((*S1).lcar ==(*S1).fcar)
return ERROR;
else
(*S1).lcar=(*S1).lcar-1;
e=(*S1).lcar;
//*e=*--(*S1).lcar;//先把S.lcar减减,再减的S.lcar指针赋值为E
return OK;
}//出主停车场
/*``````````````````````````停车场````````````````````````````*/
int InitStack2 (SqStack2 *S2)
{
(*S2).fcar=(Car2 *) malloc(STACK_INIT_SIZE * sizeof (Car2));
if (!(*S2).fcar) exit (OVERFLOW);
(*S2).lcar=(*S2).fcar;
(*S2).stacksize=STACK_INIT_SIZE;
return OK;
}
int StackEmpty2(SqStack2 S2)
{
if (S2.fcar==S2.lcar)
return OK;
}
int Push2(SqStack2 *S2,Car2 e)
{
if ((*S2).lcar -(*S2).fcar >=(*S2).stacksize )
return OVERFLOW;
else{
*(*S2).lcar ++=e;
return OK;
}
}
int Pop2(SqStack2 *S2,Car2 *e)
{
if((*S2).lcar ==(*S2).fcar)
return ERROR;
else
*e=*--(*S2).lcar;//先把S.lcar减减,再减的S.lcar指针赋值为E
return OK;
}
/*````````````````````````````````备用停车道````````````````````````*/
int InitQueue(LinkQueue *Q)
{
(*Q).front=(*Q).rear=(QueuePtr)malloc(sizeof(QNode));
if(!(*Q).front)exit(OVERFLOW);
(*Q).front->next=NULL;
return OK;
}//构建一条临时车道
int EnQueue(LinkQueue *Q, Car1 e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)exit(OVERFLOW);
p->date=e;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
return OK;
}
int DeQueue(LinkQueue *Q,Car1 *e)
{
QueuePtr P;
if (Q->front==Q->rear)
return ERROR;
P=Q->front->next;
*e=P->date;
Q->front->next=P->next;//??
if (Q->rear==P)
Q->rear=Q->front;
free(P);
return OK;
}
int QueueEmpty(LinkQueue Q)
{
if (Q.front==Q.rear)
return OK;
else
return ERROR;
}