struct 구조체

2022. 3. 4. 01:00
1
2
3
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
int main(void){
 
    // [game 출시] 
    // 이름 : 나도게임
    // 발매년도 : 2017년
    // 가격 : 50원
    // 제작사 : 나도회사
 
    char * name = "나도게임";
    int year = 2017;
    int price = 50;
    char * company = "나도회사";
 
    // [또다른 game 출시] 
    // 이름 : 너도게임
    // 발매년도 : 2017년
    // 가격 : 100원
    // 제작사 : 너도회사
 
    char * name2 = "너도게임";
    int year2 = 2017;
    int price2 = 50;
    char * company2 = "너도회사";
 
    // 구조체 사용
 
    struct GameInfo gameInfo1;
    gameInfo1.name = "나도게임";
    gameInfo1.year = 2017;
    gameInfo1.price = 50;
    gameInfo1.company = "나도 회사";
 
    // 구조체  출력
    printf("-- 게임 출시 정보 -- \n");
    printf(" 게임명   : %s\n", gameInfo1.name);
    printf(" 발매년도 : %d\n", gameInfo1.year);
    printf(" 가격    : %d\n", gameInfo1.price);
    printf(" 게임명   : %s\n", gameInfo1.company);
cs

구조체 사용으로 더 체계적으로 사용

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    // 구조체를 배열처럼 초기화
    struct GameInfo gameInfo2={"너도게임", 2017, 100, "너도회사"};
    printf("\n\n-- 또다른 게임 출시 정보 -- \n");
    printf(" 게임명   : %s\n", gameInfo2.name);
    printf(" 발매년도 : %d\n", gameInfo2.year);
    printf(" 가격    : %d\n", gameInfo2.price);
    printf(" 게임명   : %s\n", gameInfo2.company);
 
    // 구조체 배열
    struct GameInfo gameArray[2] = {
        {"나도게임", 2017, 50, "나도회사"},
        {"너도게임", 2017, 100, "너도회사"}
    };
 
    // 구조체 포인터
    struct GameInfo * gamePtr; //미션맨
 
    gamePtr = &gameInfo1;
    printf("\n\n-- 미션맨의 게임 출시 정보 -- \n");
    /*printf(" 게임명   : %s\n", (*gamePtr).name);
    printf(" 발매년도 : %d\n", (*gamePtr).year);
    printf(" 가격    : %d\n", (*gamePtr).price);
    printf(" 게임명   : %s\n", (*gamePtr).company); */
    printf(" 게임명   : %s\n", gamePtr ->name);
    printf(" 발매년도 : %d\n", gamePtr ->year);
    printf(" 가격    : %d\n", gamePtr ->price);
    printf(" 게임명   : %s\n", gamePtr ->company);
    
    // 구조체 안의 구조체
    // 연관 업체 게임 소개
 
    gameInfo1.friendGame = &gameInfo2;
    printf("\n\n-- 연관 업체의 게임 출시 정보 -- \n");
    printf(" 게임명   : %s\n", gameInfo1.friendGame ->name);
    printf(" 발매년도 : %d\n", gameInfo1.friendGame ->year);
    printf(" 가격    : %d\n", gameInfo1.friendGame ->price);
    printf(" 게임명   : %s\n", gameInfo1.friendGame ->company);
    
cs

구조체 활용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    // typedef
    // 자료형에 별명 지정
    
    int i = 1;
    typedef int 정수;
    typedef float 실수;
    정수 정수변수 = 3// int i = 3;
    실수 실수변수 = 3.23f;  // float = 3.23f;
    printf("\n\n정수변수 : %d, 실수변수 %.2f\n\n",정수변수, 실수변수);
 
    typedef struct GameInfo 게임정보;
    게임정보 game1;
    game1.name = "한글 게임";
    game1.year = 2015;
 
    GAME_INFO game2;
    game2.name = "한글 게임2";
    game2.year = 2014;
cs

typedef로 자료형 별명 지정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
    // 5마리의 고양이.
    // 아무 키나 눌러서 랜덤으로 고양이를 뽑되,
    // 5마리 모두 다 수집을 해서 열심히 키우면 되는 게임 !
    // 중 복 발 생 가 능 !
 
    // 고양이
    // 이름, 나이, 성격, 키우기 난이도 (level)
    
    srand(time(NULL));
    
    initCats();
    while(1){
        printf("두근두근!~ 어느 고양이의 집가사 될까요?\n아무 키나 눌러서 확인하세요 !");
        getchar();
 
        int selected = rand() % 5// 0 ~ 4 사이의 숫자 반환
        printCat(selected); // 뽑은 고양이 정보 출력
        collection[selected] = 1;// 고양이 뽑기 처리
 
        int collectAll = checkCollection();
    if (collectAll == 1){
        break;
    }
        
    }
    return 0;
 
}
cs

출력 내용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
typedef struct{
    char * name;
    int age;
    char * character;
    int level; // 키우기 난이도 1~5;
} CAT;
 
// 현재까지 수집한 고양이
int collection[5= {0,00,0,0};
 
// 전체 고양이 리스트
CAT cats[5];
 
void initCats();
void printCat(int selected);
int checkCollection();
cs

위 함수 선언

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
void initCats(){
    cats[0].name = "깜냥이";
    cats[0].age = 5;
    cats[0].character = "온순";
    cats[0].level = 1;
 
 
    cats[1].name = "기여미";
    cats[1].age = 3;
    cats[1].character = "날카롭";
    cats[1].level = 2;
 
 
    cats[2].name = "수주비";
    cats[2].age = 7;
    cats[2].character = "잠만잠";
    cats[2].level = 3;
 
 
    cats[3].name = "까꿍이";
    cats[3].age = 5;
    cats[3].character = "시끄러";
    cats[3].level = 4;
    
 
    cats[4].name = "대냥이";
    cats[4].age = 1;
    cats[4].character = "배고픔";
    cats[4].level = 5;
}
 
void printCat(int selected){
    printf("\n\n==당신은 이 고양이의 집사가 되었어요 ! === \n\n");
    printf(" 이름 : %s\n", cats[selected].name);
    printf(" 나이 : %d\n", cats[selected].age);
    printf(" 성격 : %d\n", cats[selected].character);
    printf(" 레벨 : ");
 
    for (int i = 0; i < cats[selected].level; i++){
        printf("%s""@");
    }
    printf("\n\n");
 
 
}
int checkCollection(){
    // 현재 보유한 고양이 목록도 출력, 다 모았는지 여부 반환
    int collectAll = 1;
 
 
    printf("\n\n===보유한 고양이 목록이에요===\n\n");
    for (int i =0; i < 5; i++){
        if (collection[i] == 0){
            printf("%10s","(빈 박스)");
            collectAll = 0;
        }
        else{
            printf("%10s", cats[i].name);
        }
    }
    printf("\n======================\n\n");
 
    if (collectAll) // 모든 고양이를 다 모은 경우
    {
        printf("축하합니다 모든 고양이를 다 모았어요! 열심히 키워주세요 !\n");
    }
    
    return collectAll;
}
cs

위 함수 정의

 

출처 : https://www.youtube.com/watch?v=q6fPjQAzll8&t=494s

'Programming > C\C++' 카테고리의 다른 글

파일 입출력  (0) 2022.03.04
MultiDimensional Array  (0) 2022.03.04
*포인터*  (0) 2022.03.04
Initial Array && ASCII  (0) 2022.02.25
functions setting 과 활용  (0) 2022.02.25

BELATED ARTICLES

more