easy softwareC언어/구조체 C언어 구조체 배열을 이용한 간단한 도서관리 프로그램JAVA 웹개발자 2015. 2. 16. 20:21 뭐, 제목은 거창하게 지어놨는데 도서관리 프로그램이라고 하기 조금 어려운 수준입니다. 구조체의 멤버로는 저자, 제목, 페이지가 있습니다. main 함수에서는 총 3권의 책에 대한 정보를 입력받고, 입력이 끝나면 책의 정보를 출력해줍니다. #include <stdio.h> void clearBuffer(void); //책의 정보를 저장하는 구조체 int main(void){ printf("도서 정보 입력\n"); //사용자로부터 세 권의 책 정보를 입력받아 //스페이스바(띄어쓰기 및 공백)를 문자열에 포함 fputs("제목 : ", stdout); fputs("페이지 수 : ", stdout); fputs("\n\n\n도서 정보 출력\n", stdout); //사용자로부터 입력받은 책 정보를 출력 //fputs로
사용자가 입력시 엔터가 문자열에 포함되므로 return 0; void clearBuffer(void){ 위의 코드에 대해 설명드릴 내용이 많습니다. 다만, clearBuffer라는 함수는 제 블로그에서 '입력버퍼를 비우는 함수' 라고 검색하면 설명을 바로 보실 수 있기 때문에 생략하겠습니다. 일단 구조체를 하나 정의해서 문자열과 정수를 저장할 수 있는 멤버를 선언합니다. 이후에 main함수에서 길이가 3인 구조체 배열을 선언했습니다. 이 구조체 배열은 아래와 같습니다. 사용자가 책 한권의 정보를 입력하면 b[0]의 멤버에 저장됩니다. 그리고 두번째는 b[1]에 저장됩니다. 코드를 보면 출력할때 printf함수만 사용한게 아니라, putchar와 fputs도 사용하고 있는데요, 다양한 출력문을 보여드리기 위해 저렇게 작성했습니다. 코드 중간에 사용자로부터 책에 대한 정보를 사용자로부터 입력받고 있습니다. 그런데 저자와 제목은 scanf가 아닌 fgets를 사용하고 있습니다. 이유는 scanf는 띄어쓰기로 문자열을 구분합니다. 즉, "Hong Kim Lee" 를 입력하면 Hong만 인식하는 것입니다. 그런데 fgets는 띄어쓰기도 문자로 인식하기 때문에 scanf대신 사용한 것입니다. 입력을 받을 때 또 한가지 특이한 점은 page를 입력받을 때만 & 연산자를 사용했다는 점입니다. 배열을 전달한다는 것은, 배열의 첫번째 주소를 전달한다는 것이기 때문에 문자열을 입력받을 때에는 & 연산자를 사용하지 않은 것입니다. 단, int형인 page를 입력받을 때에는 & 연산자를 사용하여 주소값을 전달하고 있습니다. 잘 이해가 되지 않는다면, 제 블로그에서 포인터와 배열에 관한 카테고리를 공부해 보세요. 이렇게 제목만 거창하고 실상은? 조금 허접해 보일 수 있는 도서관리 프로그램을 보셨습니다. 작은 프로그램이지만, 참 많은 내용을 포함하고 있는 좋은 문제입니다. 출력결과
|