5번째 문제 방관리 프로그램
우선 코드를 작성해보았다.
#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}