자료구조(9)_5번 방 문제 답안

방문제 답안

#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}

0%