3-1 상품 주문 관리 구조체 만들기

문제설명

상품과 주문 정보를 구조체로 설계하고, 구조체 배열과 포인터를 활용하여 주문 정보를 출력하는 프로그램을 작성하시오.

 

목표

이 문제 하나로 다음 개념을 모두 확인한다:

  • 구조체 정의 및 초기화
  • 구조체 배열
  • 구조체 포인터
  • -> 연산자
  • 구조체 내부 포인터
  • typedef
  • 구조체 주소 개념

요구사항

 

1. 구조체 정의 - 다음 구조체를 정의하시오.

상품(product)
- name (문자열)
- price (정수)

주문(order)
- quantity (정수)
- product를 가리키는 포인터
  • typedef를 사용하여 Product, Order로 정의하시오.

2. 데이터 생성 - 다음 데이터를 생성하시오.

  • 상품 배열 2개
    • "Keyboard", 50000
    • "Mouse", 30000
  • 주문 배열 2개
    • 첫 번째 주문 → Keyboard, 수량 2
    • 두 번째 주문 → Mouse, 수량 3

3. 출력 - 다음 형식으로 출력하시오.

Product     Price  Qty Total Amount
========================================
Keyboard    50000    2 100000
Mouse       30000    3  90000
========================================
 

4. 포인터 활용 - 반드시 아래 방식 모두 사용

  • orders[i].product->name
  • (*orders[i].product).price

5. 주소 확인 - 다음을 출력하고 결과를 확인하시오.

&products[0]
&products[0].name
 

질문) 결과가 같은지 왜 그런지 설명하시오. 

 

출력예시

Product     Price  Qty Total Amount
========================================
Keyboard    50000    2 100000
Mouse       30000    3  90000
========================================
000000e6cbbffc20
000000e6cbbffc20
 

 

 

예상코드

더보기
#include <stdio.h>

typedef struct {
    char name[20];
    int price;
} Product;

typedef struct {
    int quantity;
    Product *product;
} Order;

int main(void)
{
    Product products[2] = {
        {"Keyboard", 50000},
        {"Mouse", 30000}
    };

    Order orders[2] = {
        {2, &products[0]},
        {3, &products[1]}
    };

    printf("%-10s %6s %4s %6s\n", "Product", "Price", "Qty", "Total Amount");
    printf("========================================\n");

    for(int i=0; i<2; i++) {
        int total = orders[i].quantity * (*orders[i].product).price;

        printf("%-10s %6d %4d %6d\n",
               orders[i].product->name,
               (*orders[i].product).price,
               orders[i].quantity,
               total);
    }
    printf("========================================\n");

    // 주소 확인
    printf("%p\n", &products[0]);
    printf("%p\n", &products[0].name);

    return 0;
}
 

+ Recent posts