더북(TheBook)

 

9장 해설

 

 

1분 퀴즈

1.

해설_ 구조체는 배열과 다르게 서로 다른 자료형의 변수들로 이루어질 수 있습니다.

본문으로

 

2.

해설_ 구조체를 정의할 때는 구조체를 나타내는 struct 키워드 뒤에 구조체명을 적습니다.

본문으로

 

3.

해설_ 구조체는 마침표로 각 변수의 멤버에 접근할 수 있습니다.

본문으로

 

4.

해설_ 구조체를 정의한 후에도 animals[0].age = 4;와 같은 방법으로 값을 수정할 수 있습니다.

본문으로

 

5.

해설_ 구조체 포인터는 화살표(->)를 이용해 다른 구조체 변수의 값에 접근할 수 있습니다.

본문으로

 

6.

해설_ 구조체 포인터인 next를 통해 1호차는 2호차, 2호차는 3호차와 연결되어 있습니다. 승무원은 1호차부터 시작해 구조체 포인터 next를 통해 2호차로, 다시 next를 통해 3호차로 이동하며 이때의 no 변수의 값은 3입니다.

본문으로

 

7.

해설_ typedef와 상관없이 구조체 변수는 마침표로 접근합니다.

본문으로

 

 

셀프체크

#include <stdio.h>

struct book {
    int id; // 번호(ID)
    char * title; // 제목
    int available; // 0 : 대출 , 1 : 대출 가능
};

void print_books(struct book * books); // 함수 선언

int main(void) {
    struct book books[4] = { // 도서 4 정의, 처음에는 모두 대출 가능한 상태
        {1, "C 입문편", 1},
        {2, "파이썬 기본편", 1},
        {3, "자바 기본편", 1},
        {4, "파이썬 중급편", 1}
    };        
    int input; // 사용자 입력을 저장할 변수
    while (1) {
        print_books(books); // 전체 도서 정보 출력 함수 호출
        printf("대출/반납할  번호를 입력하세요.(종료 : -1) : ");
        scanf_s("%d", &input); // 사용자 입력
        if (input == -1) { // -1 입력받으면 반복문 탈출  프로그램 종료
            printf("프로그램을 종료합니다.\n\n");
            break;
        }
        if (input < 1 || input > 4) { // 도서가 4권이므로 1~4 입력받기
            printf("잘못된 입력입니다.\n\n");
            continue;
        }
        input -= 1; // 배열은 0부터 시작하므로 입력값에서 1 빼기
       if (books[input].available == 0) { // 대출 중인 도서이면 반납 처리
            printf("'%s' 반납이 완료됐습니다.\n\n", books[input].title);
            books[input].available = 1;
        } else { // 대출 가능한 도서이면 대출 처리
            printf("'%s' 대출이 완료됐습니다.\n\n", books[input].title);
            books[input].available = 0;
        }
    }
    return 0;
}

// 전체 도서 정보 출력, books 배열은 구조체 포인터로 처리
void print_books(struct book * books) { // 함수 정의
    char * available = "대출 가능";
    char * unavailable = "대출 ";
    printf("전체 도서 목록입니다.\n");
    printf("===============================\n");
    for (int i = 0; i < 4; i++) { 
        printf("%d. %-16s ", books[i].id, books[i].title); // 도서 번호, 도서 제목 출력
        // 대출 여부 출력
        if (books[i].available) {
            printf("[%s]\n", available);
        } else {
            printf("[%s]\n", unavailable);
        }
    }
    printf("===============================\n");
}

본문으로

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.