user-0 提问: c语言   停车场   求大神改一下

回复:
user: user-1
content: #include<iostream> using namespace std;   typedef struct time {     int hour;     int min; }Time;  typedef struct CarNode {     char CarNumber[10];     Time reach;     Time leave; }StackElementType, QueueElementType;   typedef struct Node {     struct CarNode *data;     struct Node *next; }LinkQueueNode;   class Queue { private:     LinkQueueNode *front;     LinkQueueNode *rear; public:     Queue() 	{ 		front = new LinkQueueNode ;         if (front != NULL) 		{ 			rear = front;             front->next = NULL; 		} 	} 	struct CarNode *getdata() 	{ 		return front->next->data; 	} 	LinkQueueNode *getfront() 	{ 		return front; 	} 	LinkQueueNode *getrear() 	{ 		return rear; 	} 	       void EnterQueue(QueueElementType *x) 	{ 		LinkQueueNode * NewNode;         NewNode = new LinkQueueNode ;         if (NewNode != NULL) 		{ 			NewNode->data = x;             NewNode->next = NULL;             rear->next = NewNode;             rear=NewNode; 		} 	}       void DeleteQueue(QueueElementType *x) 	{ 		LinkQueueNode *p;         p= front->next;         front->next = p->next;         if (rear == p)            rear =front;         x = p->data;         delete p; 	}     void Printf() 	{ 		LinkQueueNode *q;         q=front->next;         if (front !=rear) 		{ 			while (q != NULL) 			{ 				cout<<q->data->CarNumber;                 q=q->next; 			} 		} 	} };  class Stack { private:     StackElementType car[2];     int top; public:     Stack() 	{ 		top = -1; 	} 	int gettop() 	{ 		return top; 	}       void Push(StackElementType *x)       	{ 		top++;         car[top] = *x; 	}       void Pop(StackElementType *x)   	{ 		*x=car[top];         top--; 	}     void Printf() 	{          for (int i=0; i<=top; i++) 		 { 			 cout<<i+1;              cout<<car[i].CarNumber<<"\t\t\t\t"<<car[i].reach.hour<<":"<<car[i].reach.min; 		 } 	} };  void PRINT(struct CarNode *p) {   int A1, A2, B1, B2,f;     cout<<"\n请输入离开时间:/**:**/";     cin>>p->leave.hour>>p->leave.min;     cout<<"\n离开车辆:";     cout<<p->CarNumber<<"\n";     cout<<p->reach.hour<<":"<<p->reach.min<<endl;     cout<<p->leave.hour<<":"<<p->leave.min<<endl;     A1 = p->reach.hour;     A2 = p->reach.min;     B1 = p->leave.hour;     B2 = p->leave.min;     f=((B1 - A1) + (B2 - A2)/60)*5; 	cout<<"费用:"<<f<<endl; }        int main(void) {     int ch;     Stack enter;      Stack temp;      Queue wait;      while (1)     {         cout<<" 1. 车辆到达\n";         cout<<" 2. 车辆离开\n";         cout<<" 3. 列表显示\n";         cout<<" 4. 退出系统\n";           while (1)         {             cin>>ch;             if (ch >= 1 && ch <= 4)             {                 break;             }             else                  cout<<"\n please choose a number";         }         switch (ch)         {         case 1:            {     if (enter.gettop()!=1)     {         cout<<"请输入车辆牌照和进入时间:\n";         struct CarNode *p;         p = new CarNode;         cin>>p->CarNumber>>p->reach.hour>>p->reach.min;         enter.Push(p);         cout<<"车已入停车场\n";     }     else     {         cout<<"停车场已满,请入便道";         cout<<"请输入车辆牌照\n";         QueueElementType *a;         a =new QueueElementType;         cin>>a->CarNumber;         wait. EnterQueue(a);         cout<<"车已入便道\n";     }             } 		   break;          case 2: 			{  StackElementType z;  int room;     if (enter.gettop()>=0)     { 		cout<<"请输入车在车场的位置/1--";         cout<<enter.gettop()+1<<"/:";         cin>>room;         room--;         while (1)         {             if (enter.gettop()>room)             {                 enter.Pop( &z);                 temp.Push( &z);             }             else                 break;         }         enter.Pop(&z);         PRINT(&z);         while (1)         {             if (temp.gettop ()!= -1)             {                 temp.Pop( &z);                 enter.Push(&z);             }             else                 break;         }         if ((wait.getfront ()!= wait.getrear()) && enter.gettop() <=1)          {             struct CarNode *b;             b =new struct CarNode;             b = wait.getdata();             cout<<"\n请输入现在的时间/**:**/:";             cin>>b->reach.hour>>b->reach.min;             wait.DeleteQueue( b);            enter. Push(b);              cout<<"便道的第";             cout<<b->CarNumber<<"号车进入车场第"<<enter.gettop ()+ 1<<"位置.\n";         }         else             cout<<"\n便道里没有车\n";     }     else         cout<<"停车场里没车\n"; 			}  			break;          case 3: 			{ 				enter.Printf(); 				wait.Printf(); 			}             break;          case 4: break;          default: break;         }     }     return 0; }

user: user-1
content: #include <stdio.h> #include <stdio.h> #include <stdlib.h> #include <time.h>   #define FALSE -1 #define TRUE 1 #define Money 5 #define PARK 4 #define SHORCUT 5         typedef struct time {     int hour;     int min; }Time;   typedef struct CarNode {     char CarNumber[10];     Time reach;     Time leave; }StackElementType, QueueElementType;     typedef struct ZHAN {     StackElementType CarNode[2];     int top; }SeqStack;   typedef struct Node {     struct CarNode *data;     struct Node *next; }LinkQueueNode;   typedef struct ZIZE {     LinkQueueNode *front;     LinkQueueNode *rear; }LinkQueue;   void Pop(SeqStack *S, StackElementType *x); void Push(SeqStack *S,struct CarNode *x); void EnterQueue(LinkQueue *Q, QueueElementType *x); void DeleteQueue(LinkQueue * Q, QueueElementType *x); void PRINT(struct CarNode *p);   void InitStack(SeqStack *S) {     S->top = -1; }   int InitQueue(LinkQueue *Q) {     Q->front = (LinkQueueNode *)malloc(sizeof (LinkQueueNode));     if (Q->front != NULL)     {         Q->rear = Q->front;         Q->front->next = NULL;         return(TRUE);     }     else         return(FALSE); }     int getInTo(SeqStack *S, LinkQueue *Q) {     if (S->top !=1)     {         struct CarNode *p;  		printf("请输入车辆牌照和进入时间\n");         p = (struct CarNode *)malloc(sizeof(struct CarNode));         scanf("%s %d:%d", p->CarNumber, &p->reach.hour, &p->reach.min);getchar();         Push(S, p);         return PARK;     }     else     {  		QueueElementType *a;         printf("停车场已满,请入便道");         printf("请输入车辆牌照\n");         a = (QueueElementType *)malloc(sizeof(QueueElementType));         scanf("%s", a->CarNumber);getchar();         EnterQueue(Q, a);         return SHORCUT;     } }   void EnterQueue(LinkQueue *Q, QueueElementType *x) {     LinkQueueNode * NewNode;     NewNode = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));     if (NewNode != NULL)     {         NewNode->data = x;         NewNode->next = NULL;         Q->rear->next = NewNode;         Q->rear = NewNode;     } }   void DeleteQueue(LinkQueue * Q, QueueElementType *x) {     LinkQueueNode *p;     p = Q->front->next;     Q->front->next = p->next;     if (Q->rear == p)         Q->rear = Q->front;     x = p->data;     free(p); }   void Push(SeqStack *S, struct CarNode *x)       {     S->top++;     S->CarNode[S->top] = *x; }   void Pop(SeqStack *S, StackElementType *x)    {     *x = S->CarNode[S->top];     S->top--; }       void Printf(LinkQueue *Q, SeqStack *S) { 	int i; 	LinkQueueNode *q;     printf("首先输出停车场信息:n");     printf("位置\t\t车牌号\t\t\t\t进入时间\n");     for (i=0; i<=S->top; i++)     {         printf("%d\t\t", i+1);         printf("%s", S->CarNode[i].CarNumber);         printf("\t\t\t\t");         printf("%d:%d\n", S->CarNode[i].reach.hour, S->CarNode[i].reach.min);     }     q = Q->front->next;     if (Q->front != Q->rear) //判断通道上是否有车     {         printf("\n等待车辆的号码为:\n");         printf("输出便道信息:\n");         while (q != NULL)         {             puts(q->data->CarNumber);             q = q->next;         }     }     else printf("\n便道里没有车\n"); }       void Leave(LinkQueue *Q, SeqStack *Enter, SeqStack *Temp) {     StackElementType z;     if (Enter->top>=0)     {  		int room;         printf("请输入车在车场的位置/1--%d/:", Enter->top+1);         scanf("%d", &room);getchar();         room--;         printf("Enter->top:%d\n",Enter->top);         while (1)         {             if (Enter->top>room)             {                 Pop(Enter, &z);//2号车离开Enter                 Push(Temp, &z);//2号车进入Temp             }             else                 break;         }         Pop(Enter,&z);//1号车离开Enter         PRINT(&z);         while (1)         {             if (Temp->top != -1)//进入Temp的车重新进入Enter             {                 Pop(Temp, &z);                 Push(Enter, &z);             }             else                 break;         }         /*判断通道上是否有车及车站是否已满*/         if ((Q->front != Q->rear) && Enter->top <=1) /*便道的车辆进入车场*/         {             struct CarNode *b;             b = (struct CarNode *)malloc(sizeof(struct CarNode));             b = Q->front->next->data;             printf("\n请输入现在的时间/**:**/:");             scanf("%d:%d", &b->reach.hour, &b->reach.min);getchar();             DeleteQueue(Q, b);             Push(Enter, b);                           printf("\n便道的第%s号车进入车场第%d位置.\n",b->CarNumber, Enter->top + 1);         }         else             printf("\n便道里没有车.\n");     }     else         printf("车站里没车\n"); }     void PRINT(struct CarNode *p) /*打印出站车的信息*/ {     int A1, A2, B1, B2;     printf("\n请输入离开的时间:/**:**/");     scanf("%d:%d", &(p->leave.hour), &(p->leave.min));getchar();     printf("\n离开车辆的车牌号为:");     puts(p->CarNumber);     printf("\n其到达时间为: %d:%d\n", p->reach.hour, p->reach.min);     printf("离开时间为:%d:%d\n", p->leave.hour, p->leave.min);     A1 = p->reach.hour;     A2 = p->reach.min;     B1 = p->leave.hour;     B2 = p->leave.min;     printf("\n应交费用为: %2d元\n", ((B1 - A1) + (B2 - A2)/60)*Money); }   int main(void) {     SeqStack Enter, Temp;     LinkQueue Wait;     int ch;     InitStack(&Enter); /*初始化车站*/     InitStack(&Temp); /*初始化让路的临时栈*/     InitQueue(&Wait); /*初始化通道*/     while (1)     {         printf(" 1. 车辆到达\n");         printf(" 2. 车辆离开\n");         printf(" 3. 列表显示\n");         printf(" 4. 退出系统\n");           while (1)         {             scanf("%d", &ch);getchar();             if (ch >= 1 && ch <= 4)             {                 break;             }             else                  printf("\n please choose a number");         }         switch (ch)         {         case 1:            {             int a = getInTo(&Enter, &Wait);             if (a == PARK)                 printf("车已存入停车场\n");             else                 printf("车已入便道\n");            }break; /*车辆到达*/         case 2:Leave(&Wait, &Enter, &Temp); break; /*车辆离开*/         case 3:Printf(&Wait, &Enter); break; /*列表打印信息*/         case 4:exit(0); break; /*退出主程序*/         default: break;         }     }     return 0; }

user: user-1
content: 这么热闹？希望有一天我也能和大家一起参与讨论。。。

user: user-2
content: 引用 13 楼 kingofblack 的回复:小灸舞    赵4老师     感谢两位   调试时出现一些问题 ：  如  1. 在离开函数调用完后，vs提示遇到一个断点，但我并没有设置断点  2. 还有单句调试时 遇到printf这类的函数 会跳入头文件中 这个要怎么解决 1.这个问题，根据经验，一般都是空指针野指针的问题，或者是有线程在程序退出的时候没有结束掉引起的 2.用F10应该不会出现这个问题吧？F11会跳入函数

user: user-0
content: 小灸舞    赵4老师     感谢两位   调试时出现一些问题 ：  如  1. 在离开函数调用完后，vs提示遇到一个断点，但我并没有设置断点  2. 还有单句调试时 遇到printf这类的函数 会跳入头文件中 这个要怎么解决

user: user-0
content: 谢谢各位帮助   问题已经解决  这是改完的代码 #include <stdio.h> #include <tchar.h> #include <stdlib.h> #include <time.h>  #define FALSE -1 #define TRUE 1 #define Stack_Size 2  #define Money 5 #define PARK 4 #define SHORCUT 5     typedef struct time { 	int hour; 	int min; }Time;  typedef struct CarNode { 	char CarNumber[10]; 	Time reach; 	Time leave; }StackElementType, QueueElementType;   typedef struct ZHAN { 	StackElementType CarNode[Stack_Size]; 	int top; }SeqStack;  typedef struct Node { 	CarNode *data; 	struct Node *next; }LinkQueueNode;  typedef struct ZIZE { 	LinkQueueNode *front; 	LinkQueueNode *rear; }LinkQueue;  void Pop(SeqStack *S, StackElementType *x); void Push(SeqStack *S, CarNode *x); void EnterQueue(LinkQueue *Q, QueueElementType *x); void DeleteQueue(LinkQueue * Q, QueueElementType *x); void PRINT(CarNode *p);  void InitStack(SeqStack *S) { 	S->top = -1; }  int InitQueue(LinkQueue *Q) { 	Q->front = (LinkQueueNode *)malloc(sizeof(LinkQueueNode)); 	if (Q->front != NULL) 	{ 		Q->rear = Q->front; 		Q->front->next = NULL; 		return(TRUE); 	} 	else 		return(FALSE); }   int getInTo(SeqStack *S, LinkQueue *Q) { 	if (S->top != Stack_Size - 1) 	{ 		printf("请输入车辆牌照和进入时间\n"); 		CarNode *p; 		p = (CarNode *)malloc(sizeof(CarNode)); 		scanf("%s %d:%d", p->CarNumber, &p->reach.hour, &p->reach.min); 		Push(S, p); 		return PARK; 	} 	else 	{ 		printf("停车场已满，请入便道\n"); 		printf("请输入车辆牌照\n"); 		QueueElementType *a; 		a = (QueueElementType *)malloc(sizeof(QueueElementType)); 		scanf("%s", a->CarNumber); 		EnterQueue(Q, a); 		return SHORCUT; 	} }  void EnterQueue(LinkQueue *Q, QueueElementType *x) { 	LinkQueueNode * NewNode; 	NewNode = (LinkQueueNode *)malloc(sizeof(LinkQueueNode)); 	if (NewNode != NULL) 	{ 		NewNode->data = x; 		NewNode->next = NULL; 		Q->rear->next = NewNode; 		Q->rear = NewNode; 	} }  void GetHead(LinkQueue *Q, QueueElementType *x) { 	LinkQueueNode *p; 	p = Q->front->next; 	x = p->data; }  void DeleteQueue(LinkQueue * Q, QueueElementType *x) { 	LinkQueueNode *p; 	p = Q->front->next; 	Q->front->next = p->next; 	if (Q->rear == p) 		Q->rear = Q->front; 	x = p->data; 	free(p); }  void Push(SeqStack *S, CarNode *x)      //入栈  { 	S->top++; 	S->CarNode[S->top] = *x; }  void Pop(SeqStack *S, StackElementType *x)   //出栈 { 	*x = S->CarNode[S->top]; 	S->top--; }    void Printf(LinkQueue *Q, SeqStack *S) { 	printf("首先输出停车场信息:\n"); 	printf("位置\t\t车牌号\t\t\t\t进入时间\n"); 	for (int i=0; i<=S->top; i++) 	{ 		printf("%d\t\t", i+1); 		printf("%s", S->CarNode[i].CarNumber); 		printf("\t\t\t\t"); 		printf("%d:%d\n", S->CarNode[i].reach.hour, S->CarNode[i].reach.min); 	} 	LinkQueueNode *q; 	q = Q->front->next; 	if (Q->front != Q->rear) //判断通道上是否有车 	{ 		printf("\n等待车辆的号码为:\n"); 		printf("输出便道信息:\n"); 		while (q != NULL) 		{ 			puts(q->data->CarNumber); 			q = q->next; 		} 	} 	else printf("\n便道里没有车.\n"); }    void Leave(LinkQueue *Q, SeqStack *Enter, SeqStack *Temp) { 	StackElementType z; 	if (Enter->top>=0) 	{ 		printf("请输入车在车场的位置/1--%d/：", Enter->top+1); 		int room; 		scanf("%d", &room); 		room--; 		while (1) 		{ 			if (Enter->top>room) 			{ 				Pop(Enter, &z); 				Push(Temp, &z); 			} 			else 				break; 		} 		Pop(Enter,&z); 		PRINT(&z); 		while (1) 		{ 			if (Temp->top != -1) 			{ 				Pop(Temp, &z); 				Push(Enter, &z); 			} 			else 				break; 		} 		/*判断通道上是否有车及车站是否已满*/ 		if ((Q->front != Q->rear) && Enter->top <= Stack_Size - 1) /*便道的车辆进入车场*/ 		{ 			CarNode *b; 			b = (CarNode *)malloc(sizeof(CarNode)); 			b = Q->front->next->data; 			printf("\n请输入现在的时间/**:**/:"); 			scanf("%d:%d", &b->reach.hour, &b->reach.min); 			DeleteQueue(Q, b); 			Push(Enter, b); 			 			printf("\n便道的第%s号车进入车场第%d位置.\n",b->CarNumber, Enter->top + 1); 		} 		else 			printf("\n便道里没有车.\n"); 	} 	else 		printf("车站里没车\n"); }   void PRINT(CarNode *p) /*打印出站车的信息*/ { 	int A1, A2, B1, B2; 	printf("\n请输入离开的时间:/**:**/"); 	scanf("%d:%d", &(p->leave.hour), &(p->leave.min)); 	printf("\n离开车辆的车牌号为:"); 	puts(p->CarNumber); 	printf("\n其到达时间为: %d:%d\n", p->reach.hour, p->reach.min); 	printf("离开时间为: %d:%d\n", p->leave.hour, p->leave.min); 	A1 = p->reach.hour; 	A2 = p->reach.min; 	B1 = p->leave.hour; 	B2 = p->leave.min; 	printf("\n应交费用为: %2d元\n", ((B1 - A1) + (B2 - A2)/60)*Money); }  int main(void) { 	SeqStack Enter, Temp; 	LinkQueue Wait; 	int ch; 	InitStack(&Enter); /*初始化车站*/ 	InitStack(&Temp); /*初始化让路的临时栈*/ 	InitQueue(&Wait); /*初始化通道*/ 	while (1) 	{ 		printf(" 1. 车辆到达\n"); 		printf(" 2. 车辆离开\n"); 		printf(" 3. 列表显示\n"); 		printf(" 4. 退出系统\n");  		while (1) 		{ 			scanf("%d", &ch); 			if (ch >= 1 && ch <= 4) 			{ 				break; 			} 			else  				printf("\n please choose a number"); 		} 		switch (ch) 		{ 		case 1: 		   { 			int a = getInTo(&Enter, &Wait); 			if (a == PARK) 				printf("车已存入停车场\n"); 			else 				printf("车已入便道\n"); 		   }break; /*车辆到达*/ 		case 2:Leave(&Wait, &Enter, &Temp); break; /*车辆离开*/ 		case 3:Printf(&Wait, &Enter); break; /*列表打印信息*/ 		case 4:exit(0); break; /*退出主程序*/ 		default: break; 		} 	} 	return 0; }

user: user-3
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。 被幽默会死人吗？

user: user-2
content: 帮楼主又调试了下发现Pop函数有问题，这样是拿不到值的 改成如下才行：  void Pop(SeqStack *S, StackElementType *x)   //出栈 {     *x = *(S->CarNode[S->top]);     S->top--; }  PS：这个问题解决了还有之后的问题，楼主自己再调试下哈，用单步看每个变量的值然后就知道问题在哪了

user: user-0
content: 引用 9 楼 qq423399099 的回复:[quote=引用 8 楼 kingofblack 的回复:] [quote=引用 7 楼 qq423399099 的回复:] [quote=引用 6 楼 kingofblack 的回复:] 最关键的是 主函数while没有循环    帮楼主稍微调试了下发现 getInTo函数里scanf_s("%s %d:%d", &p->CarNumber, &p->reach.hour, &p->reach.min);有问题 首先scanf_s如果要读入字符串的话，要多传一个值比较接收字符串的长度，不传这个值的话会出问题 其次p->CarNumber也用不着取地址 改为如下就好了： scanf_s("%s %d:%d", p->CarNumber, 10, &p->reach.hour, &p->reach.min);[/quote] 又出现新的问题了 调试时 出现 0x01201DC4 处(位于 park.exe 中)引发的异常: 0xC0000005: 读取位置 0xCCCCCCDC 时发生访问冲突。 这些问题具体是什么意思呢？[/quote] 都是指针的不规范操作造成，比如越界，未初始化，对NULL指针操作等等[/quote]   谢谢答疑  typedef struct time { 	int hour; 	int min; }Time;  typedef struct CarNode { 	char CarNumber[10]; 	Time reach; 	Time leave; }StackElementType, QueueElementType;   typedef struct ZHAN { 	StackElementType *CarNode[Stack_Size]; 	int top; }SeqStack;  typedef struct Node { 	CarNode *data; 	struct Node *next; }LinkQueueNode;  typedef struct ZIZE { 	LinkQueueNode *front; 	LinkQueueNode *rear; }LinkQueue;  void Pop(SeqStack *S, StackElementType *x); void Push(SeqStack *S, CarNode *x); void EnterQueue(LinkQueue *Q, QueueElementType *x); void DeleteQueue(LinkQueue * Q, QueueElementType *x); void PRINT(CarNode *p);  void InitStack(SeqStack *S) { 	S->top = -1; }  int InitQueue(LinkQueue *Q) { 	Q->front = (LinkQueueNode *)malloc(sizeof(LinkQueueNode)); 	if (Q->front != NULL) 	{ 		Q->rear = Q->front; 		Q->front->next = NULL; 		return(TRUE); 	} 	else 		return(FALSE); }   int getInTo(SeqStack *S, LinkQueue *Q) { 	if (S->top != Stack_Size - 1) 	{ 		printf("请输入车辆牌照和进入时间\n"); 		CarNode *p; 		p = (CarNode *)malloc(sizeof(CarNode)); 		scanf_s("%s %d:%d", p->CarNumber, 10, &p->reach.hour, &p->reach.min); 		Push(S, p); 		return PARK; 	} 	else 	{ 		printf("停车场已满，请入便道\n"); 		printf("请输入车辆牌照\n"); 		QueueElementType t; 		scanf_s("%s", t.CarNumber, 10); 		EnterQueue(Q, &t); 		return SHORCUT; 	} }  void EnterQueue(LinkQueue *Q, QueueElementType *x) { 	LinkQueueNode * NewNode; 	NewNode = (LinkQueueNode *)malloc(sizeof(LinkQueueNode)); 	if (NewNode != NULL) 	{ 		NewNode->data = x; 		NewNode->next = NULL; 		Q->rear->next = NewNode; 		Q->rear = NewNode; 	} }  void DeleteQueue(LinkQueue * Q, QueueElementType *x) { 	LinkQueueNode *p; 	p = Q->front->next; 	Q->front->next = p->next; 	if (Q->rear == p) 		Q->rear = Q->front; 	x = p->data; 	free(p); }  void Push(SeqStack *S, CarNode *x)      //入栈  { 	S->top++; 	S->CarNode[S->top] = x; }  void Pop(SeqStack *S, StackElementType *x)   //出栈 { 	x = S->CarNode[S->top]; 	S->top--;  }    void Printf(LinkQueue *Q, SeqStack *S) { 	printf("首先输出停车场信息:\n"); 	printf("位置\t\t车牌号\t\t\t\t进入时间\n"); 	for (int i=0; i<=S->top; i++) 	{ 		printf("%d\t\t", i+1); 		printf("%s", S->CarNode[i]->CarNumber); 		printf("\t\t\t\t"); 		printf("%d:%d\n", S->CarNode[i]->reach.hour, S->CarNode[i]->reach.min); 	} 	LinkQueueNode *q; 	q = Q->front->next; 	if (Q->front != Q->rear) //判断通道上是否有车 	{ 		printf("\n等待车辆的号码为:\n"); 		printf("输出便道信息:\n"); 		while (q != NULL) 		{ 			puts(q->data->CarNumber); 			q = q->next; 		} 	} 	else printf("\n便道里没有车.\n"); }  void Leave(LinkQueue *Q, SeqStack *Enter, SeqStack *Temp) { 	CarNode *t; 	if (Enter->top>=0) 	{ 		printf("请输入车在车场的位置/1--%d/：", Enter->top+1); 		int room; 		StackElementType x; 		scanf_s("%d", &room); 		while (1) 		{ 			if (Enter->top>room) 			{ 				Pop(Enter, &x); 				Push(Temp, &x); 			} 			else 				break; 		} 		Pop(Enter, &x); 		PRINT(&x); 		while (1) 		{ 			if (Temp->top != -1) 			{ 				Pop(Temp, &x); 				Push(Enter, &x); 			} 			else 				break; 		} 		/*判断通道上是否有车及车站是否已满*/ 		if ((Q->front != Q->rear) && Enter->top <= Stack_Size - 1) /*便道的车辆进入车场*/ 		{ 			t = Q->front->data; 			printf("\n便道的%s号车进入车场第%d位置.", t->CarNumber, Enter->top + 1); 			printf("\n请输入现在的时间/**:**/:"); 			scanf_s("%d:%d", &(t->reach.hour), &(t->reach.min)); 			EnterQueue(Q, t); 		} 		else 			printf("\n便道里没有车.\n"); 	} 	else 		printf("车站里没车\n"); }   void PRINT(CarNode *p) /*打印出站车的信息*/ { 	int A1, A2, B1, B2; 	printf("\n请输入离开的时间:/**:**/"); 	scanf_s("%d:%d", &(p->leave.hour), &(p->leave.min)); 	printf("\n离开车辆的车牌号为:"); 	puts(p->CarNumber); 	printf("\n其到达时间为: %d:%d\n", p->reach.hour, p->reach.min); 	printf("离开时间为: %d:%d\n", p->leave.hour, p->leave.min); 	A1 = p->reach.hour; 	A2 = p->reach.min; 	B1 = p->leave.hour; 	B2 = p->leave.min; 	printf("\n应交费用为: %2d元\n", ((B1 - A1) * 60 + (B2 - A2))*Money); 	free(p); }  int main(void) { 	SeqStack Enter, Temp; 	LinkQueue Wait; 	int ch; 	InitStack(&Enter); /*初始化车站*/ 	InitStack(&Temp); /*初始化让路的临时栈*/ 	InitQueue(&Wait); /*初始化通道*/ 	while (1) 	{ 		printf(" 1. 车辆到达\n"); 		printf(" 2. 车辆离开\n"); 		printf(" 3. 列表显示\n"); 		printf(" 4. 退出系统\n");  		while (1) 		{ 			scanf_s("%d", &ch); 			if (ch >= 1 && ch <= 4) 			{ 				break; 			} 			else  				printf("\n please choose a number"); 		} 		switch (ch) 		{ 		case 1: 		   { 			int a = getInTo(&Enter, &Wait); 			if (a == PARK) 				printf("车已存入停车场\n"); 			else 				printf("车已入便道\n"); 		   }break; /*车辆到达*/ 		case 2:Leave(&Wait, &Enter, &Temp); break; /*车辆离开*/ 		case 3:Printf(&Wait, &Enter); break; /*列表打印信息*/ 		case 4:exit(0); break; /*退出主程序*/ 		default: break; 		} 	} 	return 0; }  又出现问题  调试也搞不清楚，只要一输出就会变，完全不知道原因啊

user: user-2
content: 引用 8 楼 kingofblack 的回复:[quote=引用 7 楼 qq423399099 的回复:] [quote=引用 6 楼 kingofblack 的回复:] 最关键的是 主函数while没有循环    帮楼主稍微调试了下发现 getInTo函数里scanf_s("%s %d:%d", &p->CarNumber, &p->reach.hour, &p->reach.min);有问题 首先scanf_s如果要读入字符串的话，要多传一个值比较接收字符串的长度，不传这个值的话会出问题 其次p->CarNumber也用不着取地址 改为如下就好了： scanf_s("%s %d:%d", p->CarNumber, 10, &p->reach.hour, &p->reach.min);[/quote] 又出现新的问题了 调试时 出现 0x01201DC4 处(位于 park.exe 中)引发的异常: 0xC0000005: 读取位置 0xCCCCCCDC 时发生访问冲突。 这些问题具体是什么意思呢？[/quote] 都是指针的不规范操作造成，比如越界，未初始化，对NULL指针操作等等

user: user-3
content: 1.这个叫异常断点，和你设置的断点不是一回事。 2.我当此时就按Shift+F11键。

user: user-0
content: 引用 12 楼 zhao4zhong1 的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。 被幽默会死人吗？  “park.exe”(Win32): 已加载“C:\Windows\SysWOW64\advapi32.dll”。无法查找或打开 PDB 文件。 “park.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcrt.dll”。无法查找或打开 PDB 文件。 “park.exe”(Win32): 已加载“C:\Windows\SysWOW64\sechost.dll”。无法查找或打开 PDB 文件。 “park.exe”(Win32): 已加载“C:\Windows\SysWOW64\rpcrt4.dll”。无法查找或打开 PDB 文件。 “park.exe”(Win32): 已加载“C:\Windows\SysWOW64\sspicli.dll”。无法查找或打开 PDB 文件。 “park.exe”(Win32): 已加载“C:\Windows\SysWOW64\cryptbase.dll”。无法查找或打开 PDB 文件。 “park.exe”(Win32): 已加载“C:\Windows\SysWOW64\bcryptprimitives.dll”。无法查找或打开 PDB 文件。 HEAP[park.exe]: Invalid address specified to RtlValidateHeap( 00B90000, 0018F7DC ) park.exe 已触发了一个断点。    用vs2015调试时遇到的问题  ，但我并未设置断点

user: user-0
content: 引用 7 楼 qq423399099 的回复:[quote=引用 6 楼 kingofblack 的回复:] 最关键的是 主函数while没有循环    帮楼主稍微调试了下发现 getInTo函数里scanf_s("%s %d:%d", &p->CarNumber, &p->reach.hour, &p->reach.min);有问题 首先scanf_s如果要读入字符串的话，要多传一个值比较接收字符串的长度，不传这个值的话会出问题 其次p->CarNumber也用不着取地址 改为如下就好了： scanf_s("%s %d:%d", p->CarNumber, 10, &p->reach.hour, &p->reach.min);[/quote] 又出现新的问题了 调试时 出现 0x01201DC4 处(位于 park.exe 中)引发的异常: 0xC0000005: 读取位置 0xCCCCCCDC 时发生访问冲突。 这些问题具体是什么意思呢？

user: user-2
content: 引用 6 楼 kingofblack 的回复:最关键的是 主函数while没有循环    帮楼主稍微调试了下发现 getInTo函数里scanf_s("%s %d:%d", &p->CarNumber, &p->reach.hour, &p->reach.min);有问题 首先scanf_s如果要读入字符串的话，要多传一个值比较接收字符串的长度，不传这个值的话会出问题 其次p->CarNumber也用不着取地址 改为如下就好了： scanf_s("%s %d:%d", p->CarNumber, 10, &p->reach.hour, &p->reach.min);

user: user-0
content: 最关键的是 主函数while没有循环

user: user-0
content: 引用 2 楼 qq423399099 的回复:代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。 0x53B3E224 (ucrtbased.dll)处(位于 park.exe 中)引发的异常: 0xC0000005: 写入位置 0x007F3000 时发生访问冲突  调试尽是这些错误，这是输入进入车辆信息时的错误       我新手啊 搞不懂这些

user: user-2
content: 引用 3 楼 u010165006 的回复:[quote=引用 2 楼 qq423399099 的回复:] 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  小灸舞幽了老赵一默[/quote]

user: user-4
content: 引用 2 楼 qq423399099 的回复:代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  小灸舞幽了老赵一默

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0
content: 设停车场是一个可停放n辆汽车的狭长通道,且只有有个大门可供汽车进出.  汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列  (大门在最南端,最先到达的第一辆车停放在车场的最北端),  若车场内一停满n辆汽车,则后来的汽车只能在门外的便道上等候,  一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,  在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,  其他车辆再按原次序进入车场,每辆停放在车场内的车在它离开时必须按它停留时间长短交纳费用.  试为停车场编制按上述要求进行管理的模拟程序.  基本要求:  以堆栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理.  每一组输入数据包括三个数据项:汽车"到达"或"离开"信息,汽车牌照号码以及汽车在停车场内或便道上的停车位置;  若是车辆离去,则输出汽车在停车场内停留时间和应交纳的费用(在便道上停留的时间不收费).  堆栈一顺序结构实现,队列以链表结构实现.   这是原问题