HJX54088 发表于 2020-7-7 21:16:22

求助,改成c++格式

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
/*------------------------------------------------------------------------------*/
#define Max 10
int getn()
{
        int n;
        printf("欢迎您光临吉吉停车场,");
        printf("本停车场管理实行24小时制,停车每分钟0.1元.\n");
        printf("请输入停车场可容纳的车(最多10辆):");
        scanf("%d", &n);
        fflush(stdin);
        do
        {
                if (n < 1 || n>10)
                {
                        printf("输入的车辆数不在要求围,请重新输入!");
                        scanf("%d", &n);
                        fflush(stdin);
                }
                else break;
        } while (n < 1 || n>10);
        return n;
}
typedef struct time
{
        int hour;
        int min;
}Time; /*时间结点*/
typedef struct node
{
        char num;
        Time reach;
        Time leave;
}CarNode; /*车辆信息结点*/
typedef struct NODE
{
        CarNode *stack;
        int top;
}SeqStackCar; /*模拟车站*/
typedef struct car
{
        CarNode *data;
        struct car *next;
}QueueNode;
typedef struct Node
{
        QueueNode *head;
        QueueNode *rear;
}LinkQueueCar; /*模拟通道*/
void InitStack(SeqStackCar *, int n); /*声明栈*/
int InitQueue(LinkQueueCar *); /*声明便道*/
int Arrival(SeqStackCar *, LinkQueueCar *, int n); /*车辆进站*/
void Leave(SeqStackCar *, SeqStackCar *, LinkQueueCar *, int n); /*车辆出站*/
void List(SeqStackCar, LinkQueueCar); /*显示存车信息*/
void InitStack(SeqStackCar *s, int n) /*初始化栈*/
{
        int i;
        s->top = 0;
        for (i = 0; i <= n; i++)
                s->stack = NULL;
}
int InitQueue(LinkQueueCar *Q) /*初始化便道*/
{
        Q->head = (QueueNode *)malloc(sizeof(QueueNode));
        if (Q->head != NULL)
        {
                Q->head->next = NULL;
                Q->rear = Q->head;
                return(1);
        }
        else return(-1);
}
void PRINT(CarNode *p) /*打印出站车的信息*/
{
        int A1, A2, B1, B2;
        int a, b, c;
        printf("\n请输入离开的时间:/**:**/");
        scanf("%d:%d", &(p->leave.hour), &(p->leave.min));
        fflush(stdin);
        do
        {
                if (p->leave.hour < p->reach.hour || (p->leave.hour == p->reach.hour && p->leave.min < p->reach.min))
                {
                        printf("输入离开时间比进站时间早,请重新输入!\n");
                        scanf("%d:%d", &(p->leave.hour), &(p->leave.min));
                        fflush(stdin);
                }
                if (p->leave.hour < 0 || p->leave.hour >= 24 || p->leave.min < 0 || p->leave.min >= 60)
                {
                        printf("输入的时间格式有错,请重新输入!");
                        scanf("%d:%d", &(p->leave.hour), &(p->leave.min));
                        fflush(stdin);
                }
                else break;
        } while (p->leave.hour < p->reach.hour || (p->leave.hour == p->reach.hour && p->leave.min < p->reach.min) || p->leave.hour < 0 || p->leave.hour >= 24 || p->leave.min < 0 || p->leave.min >= 60);
        printf("车场现在有一辆车离开,请便道里的第一辆车进入车场!\n");
        printf("出站的车的车牌号为:");
        puts(p->num);
        printf("\n");
        A1 = p->reach.hour;
        A2 = p->reach.min;
        B1 = p->leave.hour;
        B2 = p->leave.min;
        a = (B1 - A1) * 60 + B2 - A2;
        if (a >= 60)
        {
                b = a / 60;
                c = a - 60 * b;
        }
        else
        {
                b = 0;
                c = a;
        }
        printf("         祝您一路顺风,欢迎您下次光临.");
        printf("\n收据\n");
        printf("================================== 车牌号: ");
        puts(p->num);
        printf("\n");
        printf("===================================================\n");
        printf("|进车场时刻 | 出车场时刻 | 停留时间 | 应付(元)|\n");
        printf("====================================================\n");
        printf("|   %d:%d", p->reach.hour, p->reach.min);
        printf("    |   %d:%d", p->leave.hour, p->leave.min);
        printf("    |   %d:%d", b, c);
        printf("|      %2.1f", 0.1*a);
        printf("    |\n");
        printf("-----------------------------------------------------\n");
        free(p);
}
int Arrival(SeqStackCar *Enter, LinkQueueCar *W, int n) /*车辆到达*/
{
        CarNode *p;
        QueueNode *t;
        int a, b;
        p = (CarNode *)malloc(sizeof(CarNode));
        flushall();
        printf("\n请输入车牌号(七位,例:吉A1234):\n");
        printf("请严格按照要求输入车牌号,否则系统会出错!\n");
        do
        {
                a = strlen("陕A1234");
                b = strlen(gets(p->num));
                fflush(stdin);
                if (a != b)
                {
                        printf("输入车牌号格式错误,请重新输入(七位)!\n");
                        gets(p->num);
                        fflush(stdin);
                }
                else break;
                if (a != b)
                        printf("输入车牌号格式错误,请重新输入(七位)!\n");
        } while (a != b);
        if (Enter->top < n) /*车场未满,车进车场*/
        {
                Enter->top++;
                printf("\n车辆在车场第%d位置.", Enter->top);
                fflush(stdin);
                printf("\n请输入到达时间:/**:**/");
                scanf("%d:%d", &(p->reach.hour), &(p->reach.min));
                fflush(stdin);
                do
                {
                        if (p->reach.hour < 0 || p->reach.hour >= 24 || p->reach.min < 0 || p->reach.min >= 60)
                        {
                                printf("输入的时间格式有错,请重新输入!");
                                scanf("%d:%d", &(p->reach.hour), &(p->reach.min));
                                fflush(stdin);
                        }
                        else
                                break;
                } while (p->reach.hour < 0 || p->reach.hour >= 24 || p->reach.min < 0 ||
                        p->reach.min >= 60);
                Enter->stack = 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 n)
{ /*车辆离开*/
        int i, room;
        CarNode *p, *t;
        QueueNode *q;/*判断车场是否有车*/
        if (Enter->top > 0) /*有车*/
        {
                while (1) /*输入离开车辆的信息*/
                {
                        printf("\n请输入要离开的车在车场的位置/1--%d/:", Enter->top);
                        scanf("%d", &room);
                        fflush(stdin);
                        if (room >= 1 && room <= Enter->top) break;
                }
                while (Enter->top > room) /*车辆离开*/
                {
                        Temp->top++;
                        Temp->stack = Enter->stack;
                        Enter->stack = NULL;
                        Enter->top--;
                }
                p = Enter->stack;
                Enter->stack = NULL;
                Enter->top--;
                while (Temp->top >= 1)
                {
                        Enter->top++;
                        Enter->stack = Temp->stack;
                        Temp->stack = NULL;
                        Temp->top--;
                } PRINT(p);/*判断通道上是否有车及车站是否已满*/
                if ((W->head != W->rear) && Enter->top < n) /*便道的车辆进入车场*/
                {
                        q = W->head->next;
                        t = q->data;
                        Enter->top++;
                        printf("\n现在请便道上的车进入车场.该车的车牌号为:");
                        puts(t->num);
                        printf("\n该车进入车场第%d位置.", Enter->top);
                        printf("\n请输入现在的时间(即该车进站的时间)/**:**/:");
                        scanf("%d:%d", &(t->reach.hour), &(t->reach.min));
                        fflush(stdin);
                        do
                        {
                                if (t->reach.hour < 0 || t->reach.hour >= 24 || t->reach.min < 0 || t->reach.min >= 60)
                                {
                                        printf("输入的时间格式有错,请重新输入!");
                                        scanf("%d:%d", &(t->reach.hour), &(t->reach.min));
                                        fflush(stdin);
                                }
                                else
                                        break;
                        } while (t->reach.hour < 0 || t->reach.hour >= 24 || t->reach.min < 0 || t->reach.min >= 60);
                        W->head->next = q->next;
                        if (q == W->rear) W->rear = W->head;
                        Enter->stack = 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->reach.hour, S->stack->reach.min);
                        puts(S->stack->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;
                        printf("\n");
                }
        }
        else printf("\n目前便道里没有车.");
}
void List(SeqStackCar S, LinkQueueCar W)
{
        int flag, tag;
        flag = 1;
        while (flag)
        {
                printf("\n1.车场\n2.便道\n3.返回\n");
                while (1)
                {
                        printf("\n请选择 1|2|3:");
                        scanf("%d", &tag);
                        fflush(stdin);
                        do
                        {
                                if (tag < 1 || tag>3)
                                {
                                        printf("输入有误,请按要求重新输入!");
                                        scanf("%d", &tag);
                                        fflush(stdin);
                                }
                                else
                                        break;
                        } while (tag > 3 && tag < 1);
                        break;
                }
                switch (tag)
                {
                case 1:List1(&S); break; /*列表显示车场信息*/
                case 2:List2(&W); break; /*列表显示便道信息*/
                case 3:flag = 0; break;/*返回*/
                default: break;
                }
        }
}
void main()
{
        SeqStackCar Enter, Temp;
        LinkQueueCar Wait;
        int ch;
        int n;
        printf("该停车场管理系统是个比较简单系统,在应用的时候请注意要求! \n");
        printf("============================================================\n");
        n = getn();
        InitStack(&Enter, n); /*初始化车场*/
        InitStack(&Temp, n); /*初始化让路的临时栈*/
        InitQueue(&Wait); /*初始化便道*/
        while (1)
        {
                printf("\n1. 车辆进站");
                printf(" 2. 车辆出站");
                printf(" 3. 存车信息");
                printf(" 4. 退出系统\n");
                while (1)
                {
                        printf("请选择: 1|2|3|4.\n");
                        scanf("%d", &ch);
                        fflush(stdin);
                        do
                        {
                                if (ch > 4 || ch < 1) {
                                        printf("输入有误,请重新输入!");
                                        scanf("%d", &ch);
                                        fflush(stdin);
                                }
                                else
                                        break;
                        } while (ch > 4 || ch < 1);
                        break;
                }
                switch (ch)
                {
                case 1:Arrival(&Enter, &Wait, n); break; /*车辆进站*/
                case 2:Leave(&Enter, &Temp, &Wait, n); break; /*车辆出站*/
                case 3:List(Enter, Wait); break; /*存车信息*/
                case 4:exit(0); /*退出系统*/
                default:break;
                }
        }
}

superbe 发表于 2020-7-7 21:16:23

本帖最后由 superbe 于 2020-7-22 13:26 编辑

试着修改了下,不知道还有没有问题,你测试下。
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <iomanip>
using namespace std;

#define Max 10
void checkcin();

int getn()
{
    int n;
    cout << "欢迎您光临吉吉停车场,";
    cout << "本停车场管理实行24小时制,停车每分钟0.1元.\n";
    cout << "请输入停车场可容纳的车(最多" << Max << "辆): ";
   
    while (!(cin >> n) || n < 1 || n > Max)
    {
      checkcin();
      cout << "输入的车辆数不在要求范围,请重新输入: ";
    }

    return n;
}
typedef struct time
{
    int hour;
    int min;
}Time; /*时间结点*/
typedef struct node
{
    char num;
    Time reach;
    Time leave;
}CarNode; /*车辆信息结点*/
typedef struct NODE
{
    CarNode *stack;
    int top;
}SeqStackCar; /*模拟车站*/
typedef struct car
{
    CarNode *data;
    struct car *next;
}QueueNode;
typedef struct Node
{
    QueueNode *head;
    QueueNode *rear;
}LinkQueueCar; /*模拟通道*/
void InitStack(SeqStackCar *, int n); /*声明栈*/
int InitQueue(LinkQueueCar *);      /*声明便道*/
int Arrival(SeqStackCar *, LinkQueueCar *, int n); /*车辆进站*/
void Leave(SeqStackCar *, SeqStackCar *, LinkQueueCar *, int n); /*车辆出站*/
void List(SeqStackCar, LinkQueueCar); /*显示存车信息*/
void InitStack(SeqStackCar *s, int n) /*初始化栈*/
{
    int i;
    s->top = 0;
    for (i = 0; i <= n; i++)
      s->stack = NULL;
}
int InitQueue(LinkQueueCar *Q) /*初始化便道*/
{
    Q->head = new QueueNode;
    if (Q->head != NULL)
    {
      Q->head->next = NULL;
      Q->rear = Q->head;
      return(1);
    }
    else return(-1);
}
void PRINT(CarNode *p) /*打印出站车的信息*/
{
    int A1, A2, B1, B2;
    int a, b, c;
    cout << "\n请输入离开的时间(**:**): ";

    while (1)
    {
      if (!((cin >> p->leave.hour).ignore() >> p->leave.min) ||
            (p->leave.hour < 0 || p->leave.hour >= 24 || p->leave.min < 0 || p->leave.min >= 60))
      {
            checkcin();
            cout << "输入的时间格式有误,请重新输入: ";
      }
      else if (p->leave.hour < p->reach.hour || (p->leave.hour == p->reach.hour && p->leave.min < p->reach.min))
            cout << "输入的离开时间比进站时间早,请重新输入: ";
      else
            break;
    }
    cout << "车场现在有一辆车离开,请便道里的第一辆车进入车场!\n";
    cout << "出站的车的车牌号为: ";
    cout << p->num << endl << endl;
    A1 = p->reach.hour;
    A2 = p->reach.min;
    B1 = p->leave.hour;
    B2 = p->leave.min;
    a = (B1 - A1) * 60 + B2 - A2;
    if (a >= 60)
    {
      b = a / 60;
      c = a - 60 * b;
    }
    else
    {
      b = 0;
      c = a;
    }
    cout << "         祝您一路顺风,欢迎您下次光临.";
    cout << "\n收据\n";
    cout << "================================== 车牌号: ";
    cout << p->num << endl << endl;
    cout << "===================================================\n";
    cout << "|进车场时刻 | 出车场时刻 | 停留时间 | 应付(元)|\n";
    cout << "====================================================\n";
    cout << "|   " << p->reach.hour << ":" << p->reach.min;
    cout << "    |   " << p->leave.hour << ":" << p->leave.min;
    cout << "    |   " << b << ":" << c;
    cout << fixed << setprecision(1);
    cout << "|      " << 0.1*a;
    cout << "    |\n";
    cout << "-----------------------------------------------------\n";
    delete p;
}
int Arrival(SeqStackCar *Enter, LinkQueueCar *W, int n) /*车辆到达*/
{
    CarNode *p;
    QueueNode *t;
    p = new CarNode;
    cout << "\n请输入车牌号(七位,例:吉A1234):\n";
    cout << "请严格按照要求输入车牌号,否则系统会出错!\n";
    while (!cin.getline(p->num, 10) || strlen(p->num) != strlen("陕A1234"))
    {
      checkcin();
      cout << "输入车牌号格式错误,请重新输入(七位):\n";
    }
    if (Enter->top < n) /*车场未满,车进车场*/
    {
      Enter->top++;
      cout << "\n车辆在车场第" << Enter->top << "位置.";
      cout << "\n请输入到达时间(**:**): ";

      while(!((cin >> p->reach.hour).ignore() >> p->reach.min) ||
            p->reach.hour < 0 || p->reach.hour >= 24 || p->reach.min < 0 || p->reach.min >= 60)
      {
            checkcin();
            cout << "输入的时间格式有误,请重新输入: ";
      }
      Enter->stack = p;
      return(1);
    }
    else /*车场已满,车进便道*/
    {
      cout << "\n请该车在便道稍作等待!";
      t = new 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 n) /*车辆离开*/
{
    int room;
    CarNode *p, *t;
    QueueNode *q;/*判断车场是否有车*/
    if (Enter->top > 0) /*有车*/
    {
      cout << "\n请输入要离开的车在车场的位置(1--" << Enter->top << "): ";
      while (!(cin >> room) || room < 1 || room > Enter->top) /*输入离开车辆的信息*/
      {
            checkcin();
            cout << "输入的位置超出范围,请重新输入: ";
      }
      while (Enter->top > room) /*车辆离开*/
      {
            Temp->top++;
            Temp->stack = Enter->stack;
            Enter->stack = NULL;
            Enter->top--;
      }
      p = Enter->stack;
      Enter->stack = NULL;
      Enter->top--;
      while (Temp->top >= 1)
      {
            Enter->top++;
            Enter->stack = Temp->stack;
            Temp->stack = NULL;
            Temp->top--;
      }
      PRINT(p);/*判断通道上是否有车及车站是否已满*/
      if ((W->head != W->rear) && Enter->top < n) /*便道的车辆进入车场*/
      {
            q = W->head->next;
            t = q->data;
            Enter->top++;
            cout << "\n现在请便道上的车进入车场. 该车的车牌号为: ";
            cout << t->num << endl;
            cout << "\n该车进入车场第" << Enter->top << "位置.";
            cout << "\n请输入现在的时间(即该车进站的时间**:**): ";

            while (!((cin >> t->reach.hour).ignore() >> t->reach.min) ||
                t->reach.hour < 0 || t->reach.hour >= 24 || t->reach.min < 0 || t->reach.min >= 60)
            {
                checkcin();
                cout << "输入的时间格式有误,请重新输入: ";
            }
            W->head->next = q->next;
            if (q == W->rear) W->rear = W->head;
            Enter->stack = t;
            delete q;
      }
      else cout << "\n目前便道里没有车.\n";
    }
    else cout << "\n目前车场里没有车,来车请直接进入车场!"; /*没车*/
}
void List1(SeqStackCar *S) /*列表显示车场存车信息*/
{
    int i;
    if (S->top > 0) /*判断车站是否有车*/
    {
      cout << "\n车场: ";
      cout << "\n 位置\t到达时间\t车牌号\n";
      for (i = 1; i <= S->top; i++)
      {
            cout << " " << i << "\t";
            cout << S->stack->reach.hour << ":" << S->stack->reach.min << "\t\t";
            cout << S->stack->num << endl;
      }
    }
    else cout << "\n目前车场里没有车\n";
}
void List2(LinkQueueCar *W) /*列表显示便道信息*/
{
    QueueNode *p;
    p = W->head->next;
    if (W->head != W->rear) /*判断通道上是否有车*/
    {
      cout << "\n目前正在等待车辆的为: ";
      while (p != NULL)
      {
            cout << p->data->num << endl;
            p = p->next;
            cout << endl;
      }
    }
    else cout << "\n目前便道里没有车.\n";
}
void List(SeqStackCar S, LinkQueueCar W)
{
    int flag = 1, tag;
    while (flag)
    {
      cout << "\n 1.车场\n 2.便道\n 3.返回\n";
      cout << "\n请选择 1|2|3: ";
      while (!(cin >> tag) || tag < 1 || tag > 3)
      {
            checkcin();
            cout << "输入有误,请按要求重新输入!";
      }
      switch (tag)
      {
            case 1: List1(&S); break; /*列表显示车场信息*/
            case 2: List2(&W); break; /*列表显示便道信息*/
            case 3: flag = 0; break;/*返回*/
            default: break;
      }
    }
}
void main()
{
    SeqStackCar Enter, Temp;
    LinkQueueCar Wait;
    int ch;
    int n;
    cout << "该停车场管理系统是个比较简单系统,在应用的时候请注意要求!\n";
    cout << "============================================================\n";
    n = getn();
    InitStack(&Enter, n); /*初始化车场*/
    InitStack(&Temp, n);/*初始化让路的临时栈*/
    InitQueue(&Wait);   /*初始化便道*/
    while (1)
    {
      cout << "\n1. 车辆进站";
      cout << " 2. 车辆出站";
      cout << " 3. 存车信息";
      cout << " 4. 退出系统\n";
      cout << "请选择: 1|2|3|4.\n";
      while (!(cin >> ch) || ch < 1 || ch >4)
      {
            checkcin();
            cout << "输入有误,请重新输入: ";
      }
      cin.get();
      switch (ch)
      {
            case 1: Arrival(&Enter, &Wait, n); break;      /*车辆进站*/
            case 2: Leave(&Enter, &Temp, &Wait, n); break; /*车辆出站*/
            case 3: List(Enter, Wait); break;            /*存车信息*/
            case 4: exit(0);                               /*退出系统*/
            default: break;
      }
    }
}

void checkcin()
{
    if (cin.good())
      return;
    else if (cin.fail() && !cin.eof() && !cin.bad())
    {
      cin.clear();
      while (cin.get() != '\n');
    }
    else {
      cout << "出现不可恢复的错误,程序退出.\n";
      exit(1);
    }
}

Hello. 发表于 2020-7-7 21:36:19

啥意思

HJX54088 发表于 2020-7-7 21:44:00

Hello. 发表于 2020-7-7 21:36
啥意思

这代码是C语言的输出输入,我想换成C++的输出输入

徐颖科 发表于 2020-7-7 23:29:53

没有 300 鱼币打死我不改这堆……    你工作之后会懂的~

我叫MD 发表于 2020-7-7 23:37:19

HJX54088 发表于 2020-7-7 21:44
这代码是C语言的输出输入,我想换成C++的输出输入

printf改为 cout 不就行了

KevinHu 发表于 2020-7-8 07:40:00

直接把扩展名改成.cpp不就行了

HJX54088 发表于 2020-7-8 08:16:03

我叫MD 发表于 2020-7-7 23:37
printf改为 cout 不就行了

害,中间还有一些代码是C++使用不了的

热气球 发表于 2020-7-8 09:30:07

KevinHu 发表于 2020-7-8 07:40
直接把扩展名改成.cpp不就行了

楼上说的对,再上extert "c"{{:5_109:}

永恒的蓝色梦想 发表于 2020-7-8 19:40:28

热气球 发表于 2020-7-8 09:30
楼上说的对,再上extert "c"{

是extern "C" {}啦

g5x2415a 发表于 2020-7-9 07:49:36

你的库呢?

HJX54088 发表于 2020-7-10 08:39:28

superbe 发表于 2020-7-9 14:12
试着修改了下,不知道还有没有问题,你测试下。

能帮我再调试一下吗。谢谢

superbe 发表于 2020-7-10 15:33:43

第125行忘改成delete了。刚改了。我在VS2015下能正常运行,你的有什么错误提示吗。

HJX54088 发表于 2020-7-10 16:00:06

superbe 发表于 2020-7-10 15:33
第125行忘改成delete了。刚改了。我在VS2015下能正常运行,你的有什么错误提示吗。

之前没改能调试,就是怎么输入也是显示不对

superbe 发表于 2020-7-10 19:16:59

你用得什么开发环境,截个图看看什么提示
页: [1]
查看完整版本: 求助,改成c++格式