语法没错,调试时输入后,跳出一个提示“Unhandled exception 0xC0000005;Access Violation”
直接运行时,输入后,自动停止程序。
我调试出来的错误显示是因为if语句中的指针,请问要怎么改??求大家指导指导!先谢了!
int ADDQ(PWindows w,PClient_node NewNode){ /*进队列,排队*/
PClient_node p=w->front,q=NULL; /*q用来追踪p指针*/
int flag=0;
while(p){ /*根据优先级排队*/
if(NewNode->peo.prior==3)
if(p->peo.prior<3){
NewNode->next=p;
if(flag)
q->next=NewNode;
}
else{ /*如果队首是VIP三级客户,则新来的VIP三级客户需排到他(她)的后面*/
q=p;
p=p->next;
flag=1;
continue;
}
else if(NewNode->peo.prior==2)
if(p->peo.prior<2){
NewNode->next=p;
if(flag)
q->next=NewNode;
break;
}
else{ /*如果队首是VIP三、二级客户,则新来的VIP二级客户需排到他(她)们的后面*/
q=p;
p=p->next;
flag=1;
continue;
}
else if(NewNode->peo.prior==1)
if(p->peo.prior<1){
NewNode->next=p;
if(flag)
q->next=NewNode;
break;
}
else{ /*如果队首是VIP三、二、一级客户,则新来的VIP一级客户需排到他(她)们的后面*/
q=p;
p=p->next;
flag=1;
continue;
}
else{
w->rear->next=NewNode; /*在队尾插入结点*/
w->rear=NewNode; /*修改尾指针*/
break;
}
}
w->line++;
w->traffic++;
return 1;
}
以下是队列结构:
typedef struct client_information{ /*顾客信息*/
char name[C]; /*姓名*/
char bank_card[5]; /*银行卡号*/
float money; /*存款金额*/
int prior; /*1,2,3,0分别为VIP三级,二级,一级和普通顾客*/
int w_time; /*顾客办理业务等待时间*/
int numb; /*顾客的顺序号*/
}Client, *CLIENT;
typedef struct client_node{ /*每个窗口接待的每个顾客(结点)*/
Client peo; /*队列(每个窗口接待的每个顾客)*/
struct client_node *next;
}Client_node,* PClient_node;
typedef struct WINDOWS{ /*链队列结构(窗口信息)*/
PClient_node front; // 队列头指针
PClient_node rear; //队列尾指针
int traffic; // 接待顾客量(入队列数)
int line; // 正在排队人数(当前队列长度)
int num; //窗口号
double total_time;//所用人在银行总用时
}Windows,* PWindows;
下面是队列的初始化:
int init_windows(PWindows w){ /*开辟队列基地址,并初始化队列*/
w->front=(PClient_node)malloc(sizeof(Client_node));
if(!w->front)
return 0;
w->rear=w->front;
w->front->next=NULL;
w->line=0;
w->traffic=0;
w->total_time=0;
return 1;
}
https://blog.csdn.net/hannibaychty/article/details/42399891
可以参考