자료구조(9) 숙제(5)

5번째 문제 방관리 프로그램

image

우선 코드를 작성해보았다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//방의 갯수 입력 받아
//메뉴:1.입실/2.퇴실/3.보기/4.종료
//3.보기를 누르면 현재 사용 중인 방번호가 뜬다.
//2.퇴실을 누르면 퇴실할 방번호를 입력받게 한다.
//모두가 퇴실된 상태에서 보기를 누르면 전체가 다 빈방이라고 뜬다.

void setSpace(int *su, char **dp);
char input_c(const char *msg);
int input_d(const char *msg);
void enter_room(char cnt, int in, char *pt);
void out_room(char cnt, int out, char *pt);
void display(char cnt,char *pt);

int main(void){
    //동적할당해서 방 생성
    int in,out;
    char cnt = input_c("방의 개수는 ");
    printf("문자열 : %c\n", cnt);
    
    char *pt = (char *)malloc(sizeof(char)*cnt); // int형 변수 cnt를, malloc에 sizeof(char)를 넣어줌으로써, 이거 질문 -> 이렇게 사용해도 되나요 ?  - 직접 코드 돌려보니 안되는 것 같다.
    
    while(1){
        int select = input_d("1.입실 2.퇴실 3.보기 4.종료");
        switch(select){
            case 1:
                enter_room(cnt,in,pt);
                break;
            case 2:
                out_room(cnt,out,pt);
                break;
            case 3:
                display(cnt,pt);
                break;
            case 4:
                exit(0);
                break;
            default :
                printf("잘못된 입력입니다. \n");
        }

        
    }
    
    return 0;
}

char input_c(const char *msg){

    char su;
    printf("%s 입력 :", msg);
    scanf("%c",&su);
    //scanf_s("%c",&su);
    getchar();
    return su;
}

int input_d(const char *msg){

    int su;
    printf("%s 입력 :", msg);
    scanf("%d",&su);
    //scanf_s("%d",&su);
    return su;
}

void enter_room(char cnt, int in, char *pt){
    in = input_d("입실하실 방의 번호는  ");
    //char type 은 0이 아스키코드 48부터 시작하므로 48을 빼주면 숫자를 얻을 수 있다.

    if(cnt - 48 < in || in == 0){
        printf("입실할 수 없는 방입니다.\n");
    }
    else if(pt[in] == 1){
        printf("현재 사용중인 방입니다.\n");
    }
    else{
    printf("%d호실에 입실하셨습니다.\n",in);
    pt[in] = 1;
    }
}

void out_room(char cnt, int out, char *pt){
    out = input_d("퇴실하실 방의 번호는 ");

    if(cnt - 48 < out || out == 0){
        printf("퇴실 할 수 없는 방입니다.\n");
    }
    else if(pt[out] == 0){
        printf("빈 방입니다.\n");
    }
    else if(pt[out] == 1){
        printf("%d호실에서 퇴실하셨습니다.\n",out);
        pt[out]--;
    }

}

void display(char cnt, char *pt){
    for(int i = 1; i<= cnt-48; i++){
        if(pt[i]==0)
            printf("%d호실 - 빈방 \n",i);
    }
}

의문점.

int cnt;

char *pt = (char *)malloc(sizeof(char)*cnt); 이렇게 사용가능한가 ? 돌려보니 안되는 것 같다. 그렇다면 왜 안될까?

아마도 msdn에 들어가서 malloc 함수를 확인해보니 다음과 같다.

void *malloc(
   size_t size 
);

매개 변수
size
할당할 바이트입니다.

size_t size;가 자료형과 자료명을 말하기 때문이 아닐까..


참고자료

kg아이티뱅크학원 (자료구조 수업)

문자열 포인터 참고 블로그

[동적할당을 이용한 문자열 처리]{https://m.blog.naver.com/PostView.nhn?blogId=kgsshow1994&logNo=140171859874&proxyReferer=https%3A%2F%2Fwww.google.com%2F}

0%