728x90
#include <stdio.h>
struct GameInfo(){
}; // 구조체 선언방법, 여기다가 정보를 집어넣으면 된다.★ 여기가 핵심 ★
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="너도회사";
return 0;
}
/* 구조체가 필요한 이유
관련있는 정보들이 하나로 관리되면 좋겟는데, 다 따로따로 변수에 있어서 정신이 없다.
이떄 필요한 것이 구조체
구조체 선언 방법
struct Gameinfo{
};*/
구조체가 필요한 이유: 관련있는 정보들이 하나로 관리되면 좋겠는데 다 따로따로 위처럼 숫자 붙여서 변수를 만드니 정신이 없다. 따라서 이때 필요한 것이 구조체
#include <stdio.h>
struct GameInfo(){
char * name;
int year;
int price;
char * company;
// 뒤에 값들은 다 뺴 버리고 변수 선언부 까지만 두면 된다.
// 이렇게 하면 gameinfo라는 구조체 함수가 만들어진 것
}; //구조체 선언방법, 여기다가 정보를 집어넣으면 된다.
#include <stdio.h>
struct GameInfo
{
char * name;
int year;
int price;
char * company;
// 뒤에 값들은 다 뺴 버리고 변수 선언부 까지만 두면 된다.
// 이렇게 하면 gameinfo라는 구조체 함수가 만들어진 것
}; //구조체 선언방법, 여기다가 정보를 집어넣으면 된다.
int main(void)
{ // 구조체 사용방법
struct GameInfo gameinfo1; // struct GameInfo까지가 자료형이고, 뒤에가 변수명
gameinfo1.name="나도게임"; // 실제로 값을 집어넣을 때
gameinfo1.year=2017;
gameinfo1.price=100;
gameinfo1.company="나도회사";
printf("-- 게임 출시 정보 --\n");
printf("게임명: %s\n", gameinfo1.name);
printf("게임출시연도: %d\n", gameinfo1.year);
printf("게임가격: %d\n", gameinfo1.price);
printf("게임회사: %s\n", gameinfo1.company);
return 0;
}
구조체를 사용하는 방법
#include <stdio.h>
struct GameInfo
{
char * name;
int year;
int price;
char * company;
// 뒤에 값들은 다 뺴 버리고 변수 선언부 까지만 두면 된다.
// 이렇게 하면 gameinfo라는 구조체 함수가 만들어진 것
}; //구조체 선언방법, 여기다가 정보를 집어넣으면 된다.
int main(void)
{ // 구조체 사용방법
struct GameInfo gameinfo1; // struct GameInfo까지가 자료형이고, 뒤에가 변수명
gameinfo1.name="나도게임"; // 실제로 값을 집어넣을 때
gameinfo1.year=2017;
gameinfo1.price=100;
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");
printf("게임명: %s\n", gameinfo2.name);
printf("게임출시연도: %d\n", gameinfo2.year);
printf("게임가격: %d\n", gameinfo2.price);
printf("게임회사: %s\n", gameinfo2.company);
return 0;
}
// 구조체 배열
struct GameInfo gameArray[2]= {{"나도 게임", 2017, 50, "나도회사"},
{"너도 게임", 2017, 100, "너도회사"}};
구조체 재정의(typedef)
typedef struct GameInformation
{ //구조체를 선언해뒀는데 구조체 안에서 똑같은 구조체를 변수로 가질 수 있다.
char * name;
int year;
int price;
char * company;
// 뒤에 값들은 다 뺴 버리고 변수 선언부 까지만 두면 된다.
// 이렇게 하면 gameinfo라는 구조체 함수가 만들어진 것
/* 내가 게임회사를 하나 만들었는데 내 게임회사 안에서 내 친구의 게임회사를 소개하고 싶다?
그럴떄 자기가 가지고 있는 구조체 내에 자기 구조체를 다시 선언한다.*/
struct GameInfo * friendGame; // 연관업체 게임} GAME_INFO; //구
//=======================GAME_INFO와 게임정보는 같은 형태로 쓰임=======================
typedef struct GameInfo 게임정보; // struct gameinfo 이만큼이 게임정보라는 녀석으로 불려진다.
// 이후부터는 게임정보로 변수를 만들 수 있다.
게임정보 game1;
game1. name="한글게임";
game1. year=20117;
game1.
조체 선언방법, 여기다가 정보를 집어넣으면 된다.
여기서 GAME_NFO와 게임정보라는 변수는 자료형으로 사용될 수 있다.
struct GameInformation game3; //struct GameInformation 여기까지 구조체
game3.name="한글게임3;
이렇게도 사용가능하고
typedef struct //구조체 이름 정의 없이 사용도 가능하다.
{ //구조체를 선언해뒀는데 구조체 안에서 똑같은 구조체를 변수로 가질 수 있다.
char * name;
int year;
int price;
char * company;
// 뒤에 값들은 다 뺴 버리고 변수 선언부 까지만 두면 된다.
// 이렇게 하면 gameinfo라는 구조체 함수가 만들어진 것
/* 내가 게임회사를 하나 만들었는데 내 게임회사 안에서 내 친구의 게임회사를 소개하고 싶다?
그럴떄 자기가 가지고 있는 구조체 내에 자기 구조체를 다시 선언한다.*/
struct GameInfo * friendGame; // 연관업체 게임
} GAME_INFO; //구조체 선언방법, 여기다가 정보를 집어넣으면 된다.
↑위 처럼 사용하는게 더 편리하다.
고양이 키우기 프로젝트1 (전반전)
#include <stdio.h>
#include <time.h>
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 main(void)
{
/*고양이를 랜덤으로 뽑아야 하니까, srand*/
srand(time(NULL));
initCats();// 고양이 초기화
while(1)
{
printf("두근두근!~ 어느 고양이의 집사가 될까요?\n 아무 키나 눌러서 확인하세요! ");
getchar(); // 어떤 키를 누르면 그제서야 고양이를 뽑는 동작을 하도록 한다.
// getchar 은 어떤 키가 들어오는 것을 기다림.
int selected = rand() * 5; // 0~4 사이의 숫자를 반환한다.
printCat(selected);
// 고양이를 뽑고 뽑은 고양이에 대한 정보를 알려준다. ~이런 고양이를 뽑았다.
}
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("나이 :%s \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");
}
/*프로젝트 설명: 고양이 수집 게임
5마리의 고양이가 있다. 아무키나 눌러서 랜덤으로 고양이를 뽑되, 5마리 모두 다 수집해서 열심히 키우는
되는 게임
중복 발생 가능하다.
고양이에 대한 정보: 이름, 나이, 성격, 키우기 난이도(level정보) */
고양이 키우기 프로젝트1 (후반전)
#include <stdio.h>
#include <time.h>
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 main(void)
{
/*고양이를 랜덤으로 뽑아야 하니까, srand*/
srand(time(NULL));
initCats();// 고양이 초기화
while(1)
{
printf("두근두근!~ 어느 고양이의 집사가 될까요?\n 아무 키나 눌러서 확인하세요! ");
getchar(); // 어떤 키를 누르면 그제서야 고양이를 뽑는 동작을 하도록 한다.
// getchar 은 어떤 키가 들어오는 것을 기다림.
int selected = rand() % 5; // 0~4 사이의 숫자를 반환한다.
printCat(selected); // 뽑은 공양이 정보를 출력하고 나서
// 고양이를 뽑고 뽑은 고양이에 대한 정보를 알려준다. ~이런 고양이를 뽑았다.
collection[selected]=1;// 고양이 뽑기 처리, collection
// 이런 동작을 하다가 고양이 5마리를 다 모았으면, 열심히 키우면 된다.
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("나이 :%s \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) // 고양이 수집 안 된 경우
{
printf("%10s", "(빈 박스)");
collectAll=0; // 다 모으지 못한 상태
}
else{ // 고양이 수집된 경우
printf("%10s", cats[i].name);
}
}
printf("\n=======================================================\n\n");
if(collectAll) //모든 고양이를 다 모은 경우
{
printf("\n\n 축하합니다! 모든 고양이를 다 모았어요. 열심히 키워주세요\n\n");
}
return collectAll;
}
'C언어 공부' 카테고리의 다른 글
다차원배열 (0) | 2023.07.24 |
---|---|
다차원 배열 (0) | 2023.07.21 |
포인터2 (0) | 2023.07.18 |
C언어 포인터 다시 공부 (0) | 2023.07.17 |
VSCode에서 c언어 시작하기1 (0) | 2023.07.17 |