55.6 연습문제: 게임 캐릭터 구조체 사용하기

다음 소스 코드를 완성하여 334 1.240000가 출력되게 만드세요.

practice_declare_struct_champion.c

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

struct Stats {
    float health;
    float healthRegen;
    unsigned int mana;
    float manaRegen;
    float range;
    float attackDamage;
    float armor;
    float attackSpeed;
    float magicResist;
    unsigned int movementSpeed;
};

struct Champion {
    char name[20];
    struct Stats stats;
    float abilityPower;
};

int main()
{
    _____________________________________________  

    strcpy(lux->name, "Lux");
    lux->stats.health = 477.72f;
    lux->stats.healthRegen = 1.08f;
    lux->stats.mana = 334;
    lux->stats.manaRegen = 1.24f;
    lux->stats.range = 550;
    lux->stats.attackDamage = 55.5f;
    lux->stats.attackSpeed = 0.625f;
    lux->stats.armor = 18.72f;
    lux->stats.magicResist = 30;
    lux->stats.movementSpeed = 330;
    lux->abilityPower = 0;
    
    printf("%u %f\n", lux->stats.mana, lux->stats.manaRegen);

    free(lux);    

    return 0;
}

실행 결과

334 1.240000

정답

struct Champion *lux = malloc(sizeof(struct Champion));

해설

구조체 멤버에 접근할 때 lux->stats.mana처럼 접근하고 있으므로 lux는 포인터입니다. 따라서 struct Champion *lux = malloc(sizeof(struct Champion));와 같이 포인터를 선언한 뒤 malloc 함수로 메모리를 할당해주면 됩니다.