방문제 답안
#include<stdio.h>
#include<malloc.h>
#include<Windows.h>// 윈도우제어 함수가 정의된 헤더파일
#define RI 'Y'
#define RO 'N'
int input(const char * str);
char * setSpace(int su);
void menu(int su, char * pt);
void esc(char * pt);
void disp(char * pt, int su);
void checkIn(char * pt, int su);
void checkOut(char * pt, int su);
int roomInput(int su, const char * str);
int main(void) {
int su = input("방 개수");
char * pt = setSpace(su);
system("cls");
menu(su, pt);
return 0;
}
int input(const char * str) {
int su;
printf("%s 입력 : ", str);
scanf_s("%d", &su);
return su;
}
char * setSpace(int su) {
char * pt = (char *)malloc(su);
for (int i = 0; i < su; i++) {
pt[i] = RO;
}
return pt;
}
void menu(int su, char * pt) {
while (1) {
int select = input("1.입실 2.퇴실 3.보기 4.종료");
switch (select) {
case 1:
checkIn(pt, su);
break;
case 2:
checkOut(pt, su);
break;
case 3:
disp(pt, su);
break;
case 4:
esc(pt);
default:
printf("잘못된 메뉴 입력!!!!\n");
}
system("pause");
system("cls");
}
}
void esc(char * pt) {
printf("프로그램이 종료 됩니다...\n");
free(pt);
exit(0);
}
void disp(char * pt, int su) {
printf("\n####방 현황####\n");
for (int i = 0; i < su; i++) {
if (pt[i] == RI) {
printf(" %d호실 : 입실중\n", i + 1);
}
else {
printf(" %d호실 : 빈방\n", i + 1);
}
}
printf("\n");
}
void checkIn(char * pt, int su) {
disp(pt, su);
int room = roomInput(su, "입실할 방 번호");
if (pt[room - 1] == RO) {
pt[room - 1] = RI;
printf("%d번방에 입실하셨습니다.\n", room);
}
else {
printf("%d번방은 현재 사용중입니다.\n", room);
}
}
void checkOut(char * pt, int su) {
disp(pt, su);
int room = roomInput(su, "퇴실할 방 번호");
if (pt[room - 1] == RI) {
pt[room - 1] = RO;
printf("%d번방에 퇴실하셨습니다.\n", room);
}
else {
printf("%d번방은 현재 빈방입니다.\n", room);
}
}
int roomInput(int su, const char * str) {
int room;
do {
room = input(str);
} while (room < 1 || room > su);
return room;
}
참고자료
kg아이티뱅크학원 (자료구조 수업)
[동적할당을 이용한 문자열 처리]{https://m.blog.naver.com/PostView.nhn?blogId=kgsshow1994&logNo=140171859874&proxyReferer=https%3A%2F%2Fwww.google.com%2F}