求助,改成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-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
啥意思
这代码是C语言的输出输入,我想换成C++的输出输入 没有 300 鱼币打死我不改这堆…… 你工作之后会懂的~ HJX54088 发表于 2020-7-7 21:44
这代码是C语言的输出输入,我想换成C++的输出输入
printf改为 cout 不就行了 直接把扩展名改成.cpp不就行了 我叫MD 发表于 2020-7-7 23:37
printf改为 cout 不就行了
害,中间还有一些代码是C++使用不了的
KevinHu 发表于 2020-7-8 07:40
直接把扩展名改成.cpp不就行了
楼上说的对,再上extert "c"{{:5_109:} 热气球 发表于 2020-7-8 09:30
楼上说的对,再上extert "c"{
是extern "C" {}啦 你的库呢?
superbe 发表于 2020-7-9 14:12
试着修改了下,不知道还有没有问题,你测试下。
能帮我再调试一下吗。谢谢 第125行忘改成delete了。刚改了。我在VS2015下能正常运行,你的有什么错误提示吗。 superbe 发表于 2020-7-10 15:33
第125行忘改成delete了。刚改了。我在VS2015下能正常运行,你的有什么错误提示吗。
之前没改能调试,就是怎么输入也是显示不对 你用得什么开发环境,截个图看看什么提示
页:
[1]