m0_58832018 2021-10-10 20:41 采纳率: 100%
浏览 26
已结题

c语言停车场系统,有没有人帮我看看哪里有问题

题目在这

img

我运行出一片黑,啥都没有,有时说我没有错误,有时说我这三个东西没有初始化

img

img

下面是代码


#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAXNUM 30


typedef struct time
{
    int hour;
    int min;
}Time;//时间节点

typedef struct node
{
    char num[10];
    Time reach;
    Time leave;
}CarNode;//车辆信息节点

typedef struct NODE
{
    CarNode *stack[MAXNUM+1];
    int top;
}SeqStackCar;//模拟车场

typedef struct car
{
    CarNode *data;
    struct car *next;
}QueueNode;
typedef struct Node
{
    QueueNode *head;
    QueueNode *rear;
}LinkQueueCar;//模拟便道







void StackInit(SeqStackCar *S)  //初始化停车场
{
    int i;
    S->top=0;
    for(i=0;i<=MAXNUM;i++)
        S->stack[S->top]=NULL;
}
int QueueInit(LinkQueueCar *Q)  //初始化便道
{
    Q->head=(QueueNode*)malloc(sizeof(QueueNode));
    if(Q->head!=NULL)
    {
        Q->head->next=NULL;
        Q->rear=Q->head;
        return 1;
    }
    else
        return 0;
}
void Print(CarNode *p,int room)  //打印离开车辆的信息
{
    int A1,A2,B1,B2;
    double price=0.07;
    printf("\n请输入离开的时间:/**:**/");
    scanf("%d:%d",&(p->leave.hour),&(p->leave.min));
    printf("\n离开车辆的车牌号为:");
    puts(p->num);
    printf("\n其到达时间为:%d:%d",p->reach.hour,p->reach.min);
    printf("离开时间为:%d:%d",p->leave.hour,p->leave.min);
    A1=p->reach.hour;
    A2=p->reach.min;
    B1=p->leave.hour;
    B2=p->leave.min;
    printf("\n应交费用为:%2.1f元",((B1-A1)*60+(B2-A2))*price);
    free(p);
}


int Arrival(SeqStackCar *Enter,LinkQueueCar *W)  //车辆到达
{
    CarNode *p;
    QueueNode *t;
    p=(CarNode*)malloc(sizeof(CarNode));
    printf("\n请输入车牌号(例如:A1234):");
    getchar();
    gets(p->num);
    if(Enter->top<MAXNUM) /*车场未满,车进车场*/
    {
        Enter->top++;
        printf("\n车辆在车场第%d位置.",Enter->top);
        printf("\n请输入到达时间:/**:**/");
        scanf("%d:%d",&(p->reach.hour),&(p->reach.min));
        Enter->stack[Enter->top]=p;
        return 1;
    }
    else /*车场已满,车进便道*/
    {
        printf("\n该车须在便道等待!");
        t=(QueueNode*)malloc(sizeof(QueueNode));
        t->data=p;
        t->next=NULL;
        W->rear->next=t;
        W->rear=t;
        return 1;
    }
}

void Leave(SeqStackCar *Enter, SeqStackCar *Temp, LinkQueueCar *W)  //车辆离开
{
    int room;
    CarNode *p,*t;
    QueueNode *q;

    if(Enter->top>0)  //有车否?
    {
        while(1) /*输入离开车辆的信息*/
        {
            printf("\n请输入车在车场的位置/1--%d/:",Enter->top);
            scanf("%d",&room);
            if(room>=1 && room<=Enter->top) break;
        }
        while(Enter->top>room) /*车辆离开*/
        {
            Temp->top++;
            Temp->stack[Temp->top]=Enter->stack[Enter->top];
            Enter->stack[Enter->top]=NULL;
            Enter->top--;
        }
        p=Enter->stack[Enter->top];
        Enter->stack[Enter->top]=NULL;
        Enter->top--;
        while(Temp->top >=1)
        {
            Enter->top++;
            Enter->stack[Enter->top]=Temp->stack[Temp->top];
            Temp->stack[Temp->top]=NULL;
            Temp->top--;
        }
        Print(p,room);

        //判断便道上是否有车以及车场是否已满
        if((W->head!=W->rear)&& Enter->top<MAXNUM)
        {
            q= W->head->next;
            t=q->data;
            Enter->top++;
            printf("\n便道的%s号车进入车场第%d位置.",t->num,Enter->top);
            printf("\n请输入现在的时间/**:**/:");
            scanf("%d:%d",&(t->reach.hour),&(t->reach.min));
            W->head->next=q->next;
            if(q==W->rear)W->rear=W->head;
            Enter->stack[Enter->top]=t;
            free(q);
        }
        else
            printf("\n便道里没有车.\n");
    }
    else
        printf("\n车场里没有车."); /*没车*/
}



void List1(SeqStackCar *S)  //显示车场信息
{
    int i;
    if(S->top>0)  /*判断车场内是否有车*/
    {
        printf("\n车场:");
        printf("\n位置 到达时间 车牌号\n");
        for(i=1;i<=S->top;i++)
        {
            printf(" %d ",i);
            printf("%d:%d",S->stack[i]->reach.hour,S->stack[i]->reach.min);
            puts(S->stack[i]->num);
        }
    }
    else
        printf("\n车场里没有车");
}
void List2(LinkQueueCar *W) //显示便道信息
{
    QueueNode *p;
    p=W->head->next;
    if(W->head!=W->rear)  /*判断便道上是否有车*/
    {
        printf("\n等待车辆的号码为:");
        while(p!=NULL)
        {
            puts(p->data->num);
            p=p->next;
        }
    }
    else
        printf("\n便道里没有车.");
}


void List(SeqStackCar S,LinkQueueCar W)
{
    int flag,tag;
    flag=1;
    while(flag)
    {
        printf("\n请选择1|2|3:");
        printf("\n1.车场\n2.便道\n3.返回\n");
        while(flag=1)
        {
            scanf("%d",&tag);
            if(tag>=1||tag<=3) break;
            else printf("\n请选择1|2|3:");
        }
        switch(tag)
        {
        case 1: /*列表显示车场信息*/
            List1(&S);
            break;
        case 2: /*列表显示便道信息*/
            List2(&W);
            break;
        case 3:
            flag=0;
            break;
        default:
            break;
        }
    }
}


void main()
{  

    
    SeqStackCar *S;
    SeqStackCar *Temp; //临时车场
    LinkQueueCar *Q;

    StackInit(S);
    StackInit(Temp);
    QueueInit(Q);

    int tag_2,flag2;
    flag2=1;
    
    while(flag2)
    {
        printf("----------欢迎来到停车场系统----------\n");
        printf("------------请选择服务(1-4)-----------\n");
        printf(" 1.车辆到达\n 2.车辆离开\n 3.列表显示\n 4.退出系统\n");
        while(flag2=1)
        {
            scanf("%d",&tag_2);
            if(tag_2>=1||tag_2<=4)
                break;
            else 
                printf(" 1.车辆到达\n 2.车辆离开\n 3.列表显示\n 4.退出系统\n");


            switch(tag_2)
            {
            case 1:
                Arrival(S,Q);
                printf("停车完成!");
                
            case 2:
                Leave(S,Temp,Q);
                
            case 3:
                List(*S,*Q);
                
            case 4:
                flag2=0;
                    
            default:
                break;
            }
        
        }
    
    
    }
    



}
  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-10-10 20:43
    关注

    意思就是这三个变量你在作为右值前没有作为左值进行初始化
    比如这个S,你的代码是:
    SeqStackCar *S;
    StackInit(S);

    void StackInit(SeqStackCar * S) //初始化停车场
    {
    int i;
    S->top=0;
    这个S根本就没有分配空间,你就开始S->top = 0呢,不死才怪。
    这好比给你个纸条,上面写着家庭地址,你就觉得这地址上一定有房子了啊?你就像往这里送家具。你得现在地址造好房子才能搬家具,住人啊

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月18日
  • 已采纳回答 10月10日
  • 创建了问题 10月10日

悬赏问题

  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示