int main() { while (fgets(instr, sizeof(instr), stdin) != NULL) { if(instr[0] == '\n') continue; instr[strlen(instr) - 1] = '\0'; flag = false; memset(ms, '\0', sizeof(ms)); memset(Hs, '\0', sizeof(Hs)); memset(ds, '\0', sizeof(ds)); memset(Ms, '\0', sizeof(Ms)); memset(ys, '\0', sizeof(ys)); int cur = predeal(instr); DFS(instr, 0, cur); printEle(); } return 0; }
void * procEle(void) { int floorPtr; while(1) { switch(ELEINFO.Statu) //依据当前状态判断处理方式 { case stop: //停止状态处理------------------------ if(ELEINFO.Request[ELEINFO.Floor].Req!=-1) { ELEINFO.Request[ELEINFO.Floor].Req=-1; ELEINFO.Request[ELEINFO.Floor].outReq=no; ELEINFO.Statu=open; } else { floorPtr=ELEINFO.Floor; while(floorPtr<MAX_FLOOR) { if(ELEINFO.Request[floorPtr].Req!=-1) break; floorPtr++; } if(floorPtr<MAX_FLOOR) { ELEINFO.Direction=up; ELEINFO.Statu=run; } else { floorPtr=0; while(floorPtr<ELEINFO.Floor) { if(ELEINFO.Request[floorPtr].Req!=-1) break; floorPtr++; } if(floorPtr<ELEINFO.Floor) { ELEINFO.Direction=down; ELEINFO.Statu=run; } } } break; case run: //运行状态处理--------------------- if(ELEINFO.Direction==up) { if(ELEINFO.Request[ELEINFO.Floor].Req!=-1&&ELEINFO.Request[ELEINFO.Floor].outReq!=down_req) { ELEINFO.Statu=open; } else { floorPtr=ELEINFO.Floor; while(floorPtr<MAX_FLOOR) { if(ELEINFO.Request[floorPtr].Req!=-1) break; floorPtr++; } if(floorPtr<MAX_FLOOR) { ELEINFO.Floor++; } else if(ELEINFO.Request[ELEINFO.Floor].Req!=-1&&ELEINFO.Request[ELEINFO.Floor].outReq==down_req) { ELEINFO.Statu=open; } else { floorPtr=0; while(floorPtr<ELEINFO.Floor) { if(ELEINFO.Request[floorPtr].Req!=-1) break; floorPtr++; } if(floorPtr<ELEINFO.Floor) { ELEINFO.Direction=down; } } } } else { if(ELEINFO.Request[ELEINFO.Floor].Req!=-1&&ELEINFO.Request[ELEINFO.Floor].outReq!=up_req) { ELEINFO.Statu=open; } else { floorPtr=0; while(floorPtr<ELEINFO.Floor) { if(ELEINFO.Request[floorPtr].Req!=-1) break; floorPtr++; } if(floorPtr<ELEINFO.Floor) { ELEINFO.Floor--; } else if(ELEINFO.Request[ELEINFO.Floor].Req!=-1&&ELEINFO.Request[ELEINFO.Floor].outReq==up_req) { ELEINFO.Statu=open; } else { floorPtr=ELEINFO.Floor; while(floorPtr<MAX_FLOOR) { if(ELEINFO.Request[floorPtr].Req!=-1) break; floorPtr++; } if(floorPtr<ELEINFO.Floor) { ELEINFO.Direction=up; } } } } break; case open: //开门状态处理---------------------- ELEINFO.Statu=close; if(ELEINFO.Direction==up) { if(ELEINFO.Request[ELEINFO.Floor].Req==1&&ELEINFO.Request[ELEINFO.Floor].outReq==both) { ELEINFO.Request[ELEINFO.Floor].outReq=down_req; } else if(ELEINFO.Request[ELEINFO.Floor].Req!=-1) { ELEINFO.Request[ELEINFO.Floor].outReq=no; ELEINFO.Request[ELEINFO.Floor].Req=-1; } } else if(ELEINFO.Direction==down) { if(ELEINFO.Request[ELEINFO.Floor].Req==1&&ELEINFO.Request[ELEINFO.Floor].outReq==both) { ELEINFO.Request[ELEINFO.Floor].outReq=up_req; } else if(ELEINFO.Request[ELEINFO.Floor].Req!=-1) { ELEINFO.Request[ELEINFO.Floor].outReq=no; ELEINFO.Request[ELEINFO.Floor].Req=-1; } } else { ELEINFO.Request[ELEINFO.Floor].outReq=no; ELEINFO.Request[ELEINFO.Floor].Req=-1; } break; case close: //关门状态处理---------------------- if(ELEINFO.Direction==up) { floorPtr=ELEINFO.Floor; while(floorPtr<MAX_FLOOR) { if(ELEINFO.Request[floorPtr].Req!=-1&&ELEINFO.Request[floorPtr].outReq!=down_req) break; floorPtr++; } if(floorPtr<MAX_FLOOR) { ELEINFO.Statu=run; } else { floorPtr=0; while(floorPtr<ELEINFO.Floor) { if(ELEINFO.Request[floorPtr].Req!=-1&&ELEINFO.Request[floorPtr].outReq!=up_req) break; floorPtr++; } if(floorPtr<ELEINFO.Floor) { ELEINFO.Statu=run; ELEINFO.Direction=down; } else { ELEINFO.Statu=stop; ELEINFO.Direction=still; } } } else { floorPtr=0; while(floorPtr<ELEINFO.Floor) { if(ELEINFO.Request[floorPtr].Req!=-1&&ELEINFO.Request[floorPtr].outReq!=up_req) break; floorPtr++; } if(floorPtr<ELEINFO.Floor) { ELEINFO.Statu=run; } else { floorPtr=ELEINFO.Floor; while(floorPtr<MAX_FLOOR) { if(ELEINFO.Request[floorPtr].Req!=-1&&ELEINFO.Request[floorPtr].outReq!=down_req) break; floorPtr++; } if(floorPtr<MAX_FLOOR) { ELEINFO.Statu=run; ELEINFO.Direction=up; } else { ELEINFO.Statu=stop; ELEINFO.Direction=still; } } } break; } //------------------------------------------ printEle(); //打印当前状态 sleep(1); //------------------------------------------ } }