반응형
SMALL
구조체 & typedef
//구조체(struct)
#include <stdio.h>
struct GameInfo {
char* name;
int year;
int price;
char* company;
// 연관 업체 게임
struct GameInfo* friendGame;
};
typedef struct { // GAME_INFO는 밑에 정의를 했기 때문에 GameInformation없이 구조체 정의만으로 사용할 수 있다.
char* name;
int year;
int price;
char* company;
// 연관 업체 게임
struct GameInfo* friendGame;
} GAME_INFO; // 위 typedef struct GameInformation의 내용을 치환한다는 의미이다.
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.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);
// 구조체 배열처럼 초기화
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); // (*gamePtr) = gamePtr 값을 먼저 나타내야하기 때문이다.
//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; // { "너도게임", 2017, 100, "너도회사" };
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);
// typedef
// 자료형에 별명 지정
int i = 1;
typedef int 정수;
typedef float 실수;
정수 정수변수 = 3; // int i = 3;과 같다.
실수 실수변수 = 3.23f; // float f = 3.23f;와 같다.
printf("\n\n정수변수 : %d, 실수변수 : %.2f\n\n", 정수변수, 실수변수);
typedef struct GameInfo 게임정보;
게임정보 game1;
game1.name = "한글 게임";
game1.year = 2015;
GAME_INFO game2; // GameInformation의 내용을 가져온 것이다.
game2.name = "한글 게임2";
game2.year = 2016;
return 0;
}
프로젝트
// 프로젝트
// 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);
#include <stdio.h>
#include <time.h>
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 { // 고양이 수집 O
printf("%10s", cats[i].name);
}
}
printf("\n============================================\n\n");
if (collectAll) { // 1 // 모든 고양이를 다 모은 경우
printf("\n\n축하합니다! 모든 고양이를 다 모았어요. 열심히 키워주세요!\n\n");
}
return collectAll;
}반응형
LIST
'C' 카테고리의 다른 글
| 민 C언어 (0) | 2025.12.24 |
|---|---|
| 파일 입출력(fputs, fgets, fprintf, fscanf) (0) | 2022.11.15 |
| 다차원 배열(Multidimentional Array) (0) | 2022.11.13 |
| 포인터 & 배열, Swap (0) | 2022.11.05 |
| 배열 (2) | 2022.10.26 |