8. 구조체
8.0 구조체를 알기전
하나하나 변수를 입력해서 여러개를 만들어야함.
//게임출시
// 이름 :나도게임
// 발매년도 : 2017
//가격 : 50원
// 제작사 : 나도회사
char* name = "나도게임";
int year = 2017;
int price = 50;
char* company = "나도회사";
//또다른 게임출시
// 이름 :너도게임
// 발매년도 : 2017
//가격 : 100원
// 제작사 : 너도회사
char* name2 = "너도게임";
int year2 = 2017;
int price2 = 100;
char* company2 = "너도회사";
8.1 구조체
관련있는 변수들이 너무 많아지면 정신없음 비슷한 변수끼리 묶고 싶음? 구조체 사용
메인함수위에 작성한다.
struct 구조체이름 {
넣을 변수;
넣을 변수2;
넣을 변수3;
}
//메인함수 위에 작성
struct GameInfo {
char* name;
int year;
int price;
char* company;
};
8.2 구조체 입력
구조체 사용 자료형 변수명이엇는데 struct 구조체이름 = 자료형 뒤가 변수명이라 보면됨
struct GameInfo gameInfo1;
gameInfo1.name = "나도게임";
gameInfo1.year = 2017;
gameInfo1.price = 50;
gameInfo1.company = "나도회사";
8.3 구조체 출력
구조체 출력
printf("-- 게임 출시 정보 --\n");
printf("게임명 : %s\n", gameInfo1.name);
printf("게임명 : %d\n", gameInfo1.year);
printf("게임명 : %d\n", gameInfo1.price);
printf("게임명 : %s\n", gameInfo1.company);
8.4 구조체를 배열처럼 초기화
struct GameInfo gameInfo2 = { "너도게임", 2017 , 100 , "너도회사"};
printf("-- 또 다른 게임 출시 정보 --\n");
printf("게임명 : %s\n", gameInfo2.name);
printf("게임명 : %d\n", gameInfo2.year);
printf("게임명 : %d\n", gameInfo2.price);
printf("게임명 : %s\n", gameInfo2.company);
8.5 구조체 배열
배열 넣듯이 넣으면됨
struct GameInfo gameArray[2] = {
{ "나도게임", 2017 , 50 , "나도회사"},
{ "너도게임", 2017 , 100 , "너도회사"}
};
8.6 구조체 포인터
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);
8.7 구조체 안에 구조체 넣기
struct GameInfo {
char* name;
int year;
int price;
char* company;
struct GameInfo * freindGame; //연관업체 게임 구조체 안에 구조체 넣기
};
gameInfo1.freindGame = &gameInfo2; //포인터여서 gameinfo2의 주소를 가지게 만듬
printf("\n\n-- 연관 업체의 게임 출시 정보 --\n");
printf("게임명 : %s\n", gameInfo1.freindGame->name);
printf("게임명 : %d\n", gameInfo1.freindGame->year);
printf("게임명 : %d\n", gameInfo1.freindGame->price);
printf("게임명 : %s\n", gameInfo1.freindGame->company);
8.8.1 typedef
//자료형에 별명 지정
int i = 1;
typedef int 정수; // int = 정수
typedef float 실수;
정수 정수변수 = 3; // int i = 3;
실수 실수변수 = 3.23f; // float f = 3.23f;
printf("\n\n정수변수 : %d, 실수변수 : .2f\n\n", 정수변수, 실수변수);
8.8.2 구조체에 typedef
struct 구조체이름 다적기 힘드니 별명을 지어줘서 쉽게쓰기
typedef struct GameInfo 게임정보;
게임정보 game1;
game1.name = "한글게임";
game1.year = 2015;
8.8.3 구조체 선언부터 typedef써서 이름 정의해두기
typedef struct{
char* name;
int year;
int price;
char* company;
} GAME_INFO;
//실제 사용법
GAME_INFO game2;
game2.name = "한글게임2";
game2.year = 2014;
8.9 프로젝트 고양이 뽑기
#include <stdio.h>
#include <time.h>
//5마리의 고양이가 있다.
// 아무키나 눌러서 랜덤으로 고양이를 뽑되,
// 5 마리 모두 다 수집해서 열심히 키우면 되는 게임
// 중복발생가능
//고양이
//이름, 나이, 성격, 키우기 난이도(레벨)
typedef struct {
char* name;//이름
int age; //나이
char* character; //성격
int level; //키우기 난이도(1~5) 5가 어려움
} CAT;
// 현재가지 보유한 고양이
int collection[5] = { 0, 0, 0, 0, 0 };
//전체 고양이 리스트
CAT cats[5];
void initCats(); // 고양이 정보 초기화
void printCat(int selected); //뽑은고양이 보여주기
int checkCollection();
int main(void)
{
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;
}
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 = 2;
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("특징 : %s\n", cats[selected].character);
printf("레벨 : ");
for (int i = 0; i < cats[selected].level; i++);
{
printf("%s", "★");
}
printf("\n\n");
}
int checkCollection()
{
//1. 현재 보유한 고양이 목록도 출력
//2. 다 모았는지 여부 반환
int collectAll = 1;
printf("\n\n===보유한 고양이 목록이에요===\n\n");
for (int i = 0; i < 5; i++)
{
if (collection[i] == 0) //고양이 수집 x
{
printf("%10s", "(빈 박스)");
collectAll = 0; //다모으지 못한상태
}
else //고양이 수집 함
{
printf("%10s", cats[i].name);
}
}
printf("\n========================================\n\n");
if (collectAll) //모든 고양이를 다 모은 상태
{
printf("\n\n 축하합니다! 모든 고양이를 다 모았어요 열심히 키워주세요\n\n");
}
return collectAll;
}

2022.11.12 리뷰
구조체를 배우고 백준 반복문 문제(3단계)를 풀었다.
문제 푸는 것이 재미는 있다. 성과가 보여서 그런것 같다.
중요한 것은 꺾이지 않는 마음
'기초단계 > c언어' 카테고리의 다른 글
| 2022.11.13-1 파일 입출력 (1) | 2022.11.13 |
|---|---|
| 2022.11.11-1 다차원배열 (0) | 2022.11.11 |
| 2022.11.10-2 포인터 (0) | 2022.11.10 |
| 2022.11.10-1 배열 (0) | 2022.11.10 |
| 2022.11.09-2 함수 (0) | 2022.11.09 |