...
C언어 - 도서 목록 입력하기
동적할당을 이용하여 도서 목록을 입력하는 프로그램을 만들어봤다.
본래라면, 일정한 배열의 크기를 정하고 그안에 도서 목록 정보를 넣는 식이지만, 언제 어디서 도서가 몇권 들어올지 모르니 미리 배열의 공간 크기를 정해놓는 짓은 낭비이다.
따라서 그때그때 필요할때 마다 공간을 할당해주는 동적할당 기법을 이용하여 코드를 구현해보았다.
#include <stdio.h>
#include <stdlib.h>
typedef struct book
{
int year;
char title[12];
}BOOK;
int main()
{
BOOK *page;
int n,i;
do
{
printf("\n정보를 입력할 도서 권수 : ");
scanf("%d", &n);
if(n<=0)
{
printf("ERROR - 권 수를 잘못 입력 하셨습니다.");
continue;
}
}while(n<=0);
page = (BOOK*)malloc(sizeof(BOOK)*n);
if(page == NULL)//동적할당이 제데로 안되있을때 프로그램 정지
{
printf("\nERROR");
exit(1);
}
for(i=0;i<n;i++)
{
printf("%d) 도서이름 : ",i+1);
//scanf("%s", (page+i)->title); // = page[i].title
fflush(stdin);//만일 scanf로 문자열을 입력 받으려고 하면 버퍼 비울 필요없다. 본래 정수를 입력받을시 개행은 무시되어버린다.
gets(page[i].title);//근데 gets로 문자열 입력받으려고 하면 개행이 처리되어버린다. 이유는 나도 모름.
printf(" 출판년도 : ");
scanf("%d", &(page[i].year));//page[i].year은 변수다 이것의 주소를 가리키게하려면 전체를 ()로 묶고 주소연산자 사용.
}
puts("\n >>도서 정보 목록<<");
puts("\n순번 도서명\t출판년도");
puts("===========================");
for(i=0;i<n;i++)
{
printf("%d %-12s %4d\n", i+1,(page+i)->title,(*(page+i)).year);
//(page+i)->title = (*(page+i)).title = page[i].title
}
puts("===========================");
free(page);
}
인용한 부분에 있어 만일 누락된 출처가 있다면 반드시 알려주시면 감사하겠습니다
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.