Rylah's Study & Daily Life

09. 구조체 본문

Study/C

09. 구조체

Rylah 2021. 11. 3. 11:26
#include <stdio.h>
struct GameInfo {
	char* name;
	int year;
	int price;
	char* company;

	struct GameInfo* friendGame; // 연관 게임 회사
};
typedef struct GameInformation {
	char* name;
	int year;
	int price;
	char* company;

	struct GameInfo* friendGame; // 연관 게임 회사
}GAME_INFO;

int main(void) {
	// [게임 출시]
	// 이름 : 나도게임
	// 발매년도 : 2017 년
	// 가격 : 50원
	// 제작사 : 나도회사

	char* name = "나도게임";
	int year = 2017;
	int price = 50;
	char* company = "나도회사";

	// [또다른 게임 출시]
	// 이름 : 너도게임
	// 발매년도 : 2017 년
	// 가격 : 100원
	// 제작사 : 너도회사

	char* name2 = "너도게임";
	int year2 = 2017;
	int price2 = 100;
	char* company2 = "너도회사";

	// 구조체 사용
	struct GameInfo gameinfo1;
	gameinfo1.company = "나도회사";
	gameinfo1.name = "나도게임";
	gameinfo1.year = 2017;
	gameinfo1.price = 50;

	// 구조체 출력
	printf("-- 게임 출시 정보 --\n");
	printf("  게임명     : %s\n", gameinfo1.name);
	printf("  발매년도   : %d\n", gameinfo1.year);
	printf("  가격       : %d\n", gameinfo1.price);
	printf("  제작사     : %s\n", gameinfo1.company);

	// 구조체를 배열처럼 초기화
	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 = &gameinfo2;
	/*
	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("\n\n-- 미션맨의 게임 출시 정보 --\n");
	printf("  게임명     : %s\n", gamePtr->name);
	printf("  발매년도   : %d\n", gamePtr->year);
	printf("  가격       : %d\n", gamePtr->price);
	printf("  제작사     : %s\n", gamePtr->company);

	gameinfo2.friendGame = &gameinfo1;
	
	printf("\n\n-- 연관업체의 게임 출시 정보 --\n");
	printf("  게임명     : %s\n", gameinfo2.friendGame->name);
	printf("  발매년도   : %d\n", gameinfo2.friendGame->year);
	printf("  가격       : %d\n", gameinfo2.friendGame->price);
	printf("  제작사     : %s\n", gameinfo2.friendGame->company);

	// typedef 
	// 자료형에 별명을 지정
	int i = 1;
	typedef int 정수;
	typedef float 실수;
	정수 j = 50; // int j = 50;
	실수 k = 3.23f; // float k = 3.23f
	
	printf("\n\n정수 : %d,   실수 : %.2f\n", j, k);

	typedef struct GameInfo 게임정보;

	게임정보 game1;
	game1.name = "한글 게임";
	game1.year = 2007;

	GAME_INFO game2;
	game2.name = "한글 게임 2";
	game2.year = 2014;

	struct GameInformation game3;
	return 0;

}

#include <stdio.h>
#include <time.h>
// 5마리의 고양이가 있다.
// 아무키나 눌러서 고양이를 뽑되
// 5마리 모두 다 수집해서 키우면 된다.
// 중복 발생 가능

// 고양이 
// 이름 나이 성격 키우기 난이도(레벨)

typedef struct {
	char* name; // 이름
	int age; // 나이
	char* character; // 성격
	int level; //난이도
}CAT;

int collection[5] = { 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; // 고양이 뽑은 배열은 1로 처리

		int collectAll = checkCollection();

		if (collectAll == 1) {
			getchar();
			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(" 레벨       : %d\n", cats[selected].level);
	printf(" 레벨       : ");

	for (int i = 0; i < cats[selected].level; i++) {
		printf("%s", "☆");
	}
	printf("\n");
}

int checkCollection() {
	// 현재 보유한 고양이 목록도 출력
	// 다 모았는지도 반환

	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 { // 고양이 수집 O
			printf("%10s", cats[i].name);
		}
	}
	printf("\n===========================================\n\n");

	return collectAll;


}

'Study > C' 카테고리의 다른 글

Linux 01. Hello World  (0) 2022.01.15
10. 파일 입출력  (0) 2021.11.03
08. 다차원 배열  (0) 2021.11.03
07. 포인터 (Pointer)  (0) 2021.11.02
06. 배열 (Array)  (0) 2021.11.02