#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 100
typedef char *element;
typedef struct {
element queue[SIZE];
char front, rear;
}QueueType;
void error(char *message)
{
fprintf(stderr, "%s\n", message);
exit(1);
}
void init(QueueType *q)
{
q->front = q->rear = 0;
}
int is_empty(QueueType *q)
{
return (q->front == q->rear);
}
int is_full(QueueType *q)
{
return ((q->rear + 1) % SIZE == q->front);
}
void enqueue(QueueType *q, element item)
{
if (is_full(q))
error("큐가 포화상태입니다!");
q->rear = (q->rear + 1) % SIZE;
q->queue[q->rear] = item;
}
element dequeue(QueueType *q)
{
if (is_empty(q))
error("큐가 공백상태입니다!");
q->front = (q->front + 1) % SIZE;
return q->queue[q->front];
}
element peek(QueueType *q)
{
if (is_empty(q))
error("큐가 공백상태입니다!");
return q->queue[(q->front + 1) % SIZE];
}
void main()
{
QueueType male;
QueueType Female;
init(&male);
init(&Female);
char name[SIZE];
int sex;
while(1)
{
printf("이름을 입력해주세요. : ");
scanf("%s", &name);
getchar();
printf("성별을 입력해주세요. (남자 : 0, 여자 : 1) : ");
scanf("%d", &sex);
switch (sex) {
case 0:
enqueue(&male, name);
break;
case 1:
enqueue(&Female, name);
break;
default:
printf("성별이 잘못되었습니다.\n");
}
if ((is_empty(&male) == 0 || is_empty(&Female)) == 0)
printf("아직 기다리셔야 합니다. \n");
else if ((is_empty(&male) == 0 && is_empty(&Female)) == 0)
printf("커플이 탄생했습니다! %s와 %s입니다! \n", dequeue(&male), dequeue(&Female));
else
continue;
}
return;
}
좀 봐줘라..ㅠㅠ 큐 2개쓰는것도 했고 다 됐는데 dequeue로 삭제하고 보여줄래니까 하나만 계속 반복해서 뜨네..ㅠㅠ
이것만 해결하면 잘 수 있는데 이거 하나가 안된다 ㅠㅠ
세상에는 디버거라는 툴이 있음
입력은 잘 됐는데, 메인함수 보면 알겠지만 2개의 큐로 나눠서 하나씩 매칭하는 프로그램을 만들고 싶은데, 여기서 나중에 enqueue로 집어넣은 녀석만 dequeue로 중복되서 나온다.. 이 상황에서는 어떻게 해야되냐?
그럼 어떻게 바꿔줘야되는거야? 엄청 헷갈리네;
문자열이 아닌가?
그냥 이름 보여주려고 그랬지..
아님.. dequeue 리턴값 확인해볼게 ㄳ
츄럴이 빙딱아, 물어본사람이 디버거라는 툴이란걸 잘 다루면 물어봤겠냐 생각좀 하고 말해라, 너는 그냥 염장질 밖에 안돼.
나 이제 c언어 반년도 안배운 초보다..ㅠㅠ 미안해
scanf 문자열로 받았는데.. 흠
queue는 rear부터 들어가는게 맞지 않아? item이 잘못된건가
strcpy 함수 한번 써볼게
rear 정의되어 있지 않다고 하는데 그냥 char *rear 이런식으로 변수선언 해줄까 enqueue 안에서?
구조체 써서 넣어놨는데 왜 정의가 안되어있다고 하는거지?
else continue; 가 의미가 없음 어차피 while(1) 루프 돌아가니까...
strcpy쓰니까 바로 멈춰버리네.. 미안해 도와줬는데 잘 안되가지고..
scanf("%s", &name); -----> scanf("%s", name); 고처라 &필요없다.
ㅇㅇ 그렇게 고쳐서 썼다 ㅋㅋ 근데 그냥 멈춰버림
ㅇㅇ 근데 저건 별 의미 없는 내용. 일단 나중에 쓴 큐만 중복되어 dequeue로 빠져나오는 것만 고치면 될 것 같긴 하다. 일단 고맙다 도움줘서.. 얼렁 자