#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 50
#define MAX_QUEUE_SIZE 6
typedef struct {
char** value;
int front;
int rear;
} Queue;
void init_queue(Queue* q) {
q->value = (char**)malloc(sizeof(char*) * MAX_QUEUE_SIZE);
q->front = 0;
q->rear = 0;
}
int is_full(Queue* q) {
if (((q->rear +1) % MAX_QUEUE_SIZE) == q->front)
return 1;
else
return 0;
}
int is_empty(Queue* q) {
if (q->front == q->rear)
return 1;
else
return 0;
}
void addq(Queue* q, char* value) {
q->rear = (q->rear+1) % MAX_QUEUE_SIZE;
q->value[q->rear] = value;
printf("addq: %s", value);
return;
}
char* deleteq(Queue* q) {
q->front = (q->front + 1) % MAX_QUEUE_SIZE;
return q->value[q->front];
}
void arrive(Queue q) {
int input;
char name[MAX_SIZE];
printf("\n");
printf("1. 대기자 등록\n");
printf("2. 취소\n");
scanf("%d", &input);
if (input == 1) {
if (is_full(&q) == 1) {
printf("Service is not available\n");
}
else {
printf("이름 입력: ");
scanf("%s", name);
addq(&q, name);
}
}
else if (input == 2) {
return;
}
else {
printf("입력오류\n");
return;
}
return;
}
void exit_hos(Queue q) {
char patient[MAX_SIZE];
if (is_empty(&q) == 1)
{
printf("There is no patient waiting\n");
}
else if (is_empty(&q) == 0) {
strcpy(patient, deleteq(&q));
printf("환자: %s", patient);
}
return;
}
int main() {
int input;
Queue q;
init_queue(&q);
while (1)
{
printf("\n입력대기\n");
printf("1. 병원 도착\n");
printf("2. 병원 퇴장\n");
printf("3. 서비스 종료\n");
scanf("%d", &input);
if (input == 1)
arrive(q);
else if (input == 2)
exit_hos(q);
else if (input == 3) {
printf("종료\n");
return 0;
}
else {
printf("입력 오류\n");
}
}
free(q.value);
return 0;
}
큐 이용해서 병원환자 관리 프로그램 만드는건데요
어떻게해도 addq로 환자 병원도착하고나서 퇴장하면
무조건 큐가 비어있는걸로 인식하고 There is no patient waiting이 출력됩니다
몇십분째 보고있는데 어디서 문제인건지 감도안잡히네요
고수님들 조언좀 보탁드립니다
몇십분동안 디버깅 눌러보긴 함? - dc Cpp
초보라 디버깅 어떻게 하는지 정확히모르는데 계속 해보니까 어느구간에서도 front =0 rear =0이 나오네요ㅠㅠ
메모리 해제 안하냐
q.value 말고 또 해제해야되는부분이있나요??
디버깅만 해준다 exit_hos() 실행되서 큐가 비었는지 확인하는데 front랑 rear랑 같아서 1나옴 그러니까 당연히 비었다고 뜸
addq가 일단 실행되면 rear값이 +1 되는데 왜 계속 rear값이 변동이없을까요 ㅠ
니가 addq 했다고 안바뀌고 있다 지금
메모리를 니가 어디서 만들었냐
하.. 이해가안되요 미치겠슴니다 왜 안바뀌는거지이게