#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 100

typedef struct QueueNode {
char name[SIZE];
char sex;
}element;

int front, rear;

void init() {
front = rear = 0;
}

int is_empty() {
return front == rear;
}

int is_full() {
return (rear + 1) % SIZE == front;
}

void enqueue(element *q, char name[]) {
if (is_full()) {
fprintf(stderr, "Queue is full.\n");
exit(1);
}

rear = rear + 1 % SIZE;
strcpy_s(q[rear].name, SIZE, name);
}

element *dequeue(element *q) {
if (is_empty()) {
fprintf(stderr, "Queue is empty!\n");
exit(2);
}
front = front + 1 % SIZE;
return q[front].name;
}

element *peek(element *q) {
if (is_empty()) {
fprintf(stderr, "Queue is empty!\n");
exit(2);
}
return q[front].name;
}

main() {
element male[SIZE];
element female[SIZE];
init();
printf("미팅주선 프로그램입니다.\n\n");


for (;;) {
char name[SIZE] = { 0 };
char sex;
printf("고객이름 : ");
gets_s(name, sizeof(name));
fflush(stdin);
printf("성별을 입력하세요(f or m) ");
sex = getc(stdin);
fflush(stdin);
if (sex == 'z') break;

switch (sex) {
case 'm':
enqueue(&male[rear], name);
break;
case 'f':
enqueue(&female[rear], name);
break;
default:
fprintf(stderr, "Only accept m or f!\n\n");
exit(1);
}

if (peek(&male[front]) == 0 || peek(&female[front]) == 0) {
printf("\n아직 대상자가 없습니다. 기다려주세요.\n");
}

else {
printf("커플이 탄생했습니다! ");
printf("%s과 ", dequeue(&male[front]));
printf("%s \n\n", dequeue(&female[front]));
}
}
}