Menu
Coddy logo textTech

복습: 구조체 수정 - 포인터

Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 49번째.

challenge icon

챌린지

쉬움

동적 메모리 할당, 구조체 포인터 및 함수를 사용하는 완전한 직원 관리 시스템을 보여주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다.

  1. 다음 멤버를 포함하는 Employee라는 이름의 struct를 정의합니다.
    • 직원 ID를 저장할 정수형 id
    • 직원 이름을 저장할 크기 50의 문자 배열 name
    • 부서 이름을 저장할 크기 30의 문자 배열 department
    • 직원 급여를 저장할 실수형 salary
    • 근속 연수를 저장할 정수형 yearsOfService
  2. 다음과 같은 기능을 수행하는 fillEmployeeData 함수를 작성합니다.
    • Employee 구조체에 대한 포인터를 매개변수로 받습니다.
    • 입력으로부터 ID, 이름, 부서, 급여, 근속 연수 순서대로 직원 정보를 읽습니다.
    • 화살표 연산자를 사용하여 구조체 멤버에 값을 할당합니다.
    • 근속 연수에 따른 보너스를 계산합니다: 근속 연수가 5년 이상이면 보너스는 급여의 10%, 그렇지 않으면 급여의 5%입니다.
    • 급여에 보너스를 더합니다: empPtr->salary += bonus;
  3. 다음과 같은 기능을 수행하는 displayEmployee 함수를 작성합니다.
    • Employee 구조체에 대한 포인터를 매개변수로 받습니다.
    • 다음과 같은 정확한 형식으로 직원 정보를 출력합니다.
      • Employee Details:
      • ID: [id]
      • Name: [name]
      • Department: [department]
      • Salary: [salary]
      • Years of Service: [yearsOfService]
  4. 다음과 같은 기능을 수행하는 promoteEmployee 함수를 작성합니다.
    • Employee 구조체에 대한 포인터를 매개변수로 받습니다.
    • 화살표 연산자를 사용하여 급여를 15% 인상합니다.
    • 근속 연수를 1 증가시킵니다.
    • Employee promoted successfully!를 출력합니다.
  5. 메인 함수에서 다음을 수행합니다.
    • empPtr이라는 이름의 Employee 구조체 포인터를 선언합니다.
    • malloc()을 사용하여 하나의 Employee 구조체에 대한 메모리를 동적으로 할당합니다.
    • 메모리 할당이 성공했는지 확인합니다.
      • 만약 empPtrNULL이면, Memory allocation failed를 출력하고 프로그램을 종료합니다.
      • 성공하면, Memory allocated successfully를 출력합니다.
    • fillEmployeeData를 호출하여 직원 데이터를 채웁니다.
    • Initial employee data:를 출력합니다.
    • displayEmployee를 호출하여 초기 직원 정보를 보여줍니다.
    • promoteEmployee를 호출하여 직원을 승진시킵니다.
    • After promotion:을 출력합니다.
    • displayEmployee를 다시 호출하여 업데이트된 정보를 보여줍니다.
    • free(empPtr)를 사용하여 동적으로 할당된 메모리를 해제합니다.
    • Memory freed successfully를 출력합니다.

이 챌린지는 구조체 정의, malloc()을 이용한 동적 메모리 할당, 할당 실패 확인, 함수에 구조체 포인터 전달, 화살표 연산자를 사용한 구조체 멤버 접근 및 수정, free()를 이용한 적절한 메모리 정리 등 이번 장의 모든 핵심 개념을 결합합니다. 함수들은 포인터가 어떻게 원래 구조체 데이터의 직접적인 수정을 가능하게 하는지 보여줍니다.

직접 해보기

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// TODO: 여기에 Employee 구조체를 정의하세요

// TODO: 여기에 fillEmployeeData 함수를 구현하세요

// TODO: 여기에 displayEmployee 함수를 구현하세요

// TODO: 여기에 promoteEmployee 함수를 구현하세요

int main() {
    // TODO: empPtr을 선언하고 메모리를 할당하세요
    
    // TODO: 메모리 할당이 성공했는지 확인하세요
    
    // TODO: 직원 데이터를 채우고, 초기 데이터를 표시하고, 승진시킨 후, 승진 후 데이터를 표시하세요
    
    // TODO: 메모리를 해제하고 성공 메시지를 출력하세요
    
    return 0;
}

Logic & Flow의 모든 레슨