June is Combung
포켓몬 본문
#include <stdio.h>
#include <time.h> // time()
#include <stdlib.h> // srand(), rand()
typedef struct Pokemon {
char name[40];
int lv;
int hp;
int ap;
} POK;
// TODO : 풀이, 구조체와 함수/배열/포인터
void quiz01(){
POK p1, p2, p3, p4;
// Pokemon 구조체 변수 4개 만들기
// (+ 4칸짜리 배열1개도 가능)
// scanf_s() 로 포켓몬 4마리의 이름, 레벨 입력 받기.
// 체력(hp) : 레벨의 100배
// 공격력(ap) : 레벨의 10배 (+ rand() 를 사용하여 20% 확률로 15배)
srand(time(NULL));
printf("이름 : ");
scanf_s("%s", p1.name, sizeof(p1.name));
printf("%s의 레벨 : ", p1.name);
scanf_s("%d", &p1.lv);
p1.hp = p1.lv * 100;
p1.ap = p1.lv * (rand() % 10 < 2 ? 15 : 10);
printf("이름 : ");
scanf_s("%s", p2.name, sizeof(p2.name));
printf("%s의 레벨 : ", p2.name);
scanf_s("%d", &p2.lv);
p2.hp = p2.lv * 100;
p2.ap = p2.lv * (rand() % 10 < 2 ? 15 : 10);
printf("이름 : ");
scanf_s("%s", p3.name, sizeof(p3.name));
printf("%s의 레벨 : ", p3.name);
scanf_s("%d", &p3.lv);
p3.hp = p3.lv * 100;
p3.ap = p3.lv * (rand() % 10 < 2 ? 15 : 10);
printf("이름 : ");
scanf_s("%s", p4.name, sizeof(p4.name));
printf("%s의 레벨 : ", p4.name);
scanf_s("%d", &p4.lv);
p4.hp = p4.lv * 100;
p4.ap = p4.lv * (rand() % 10 < 2 ? 15 : 10);
// printf() 로 모든 정보 출력
printf("%s LV.%d HP.%d AP.%d \n", p1.name, p1.lv, p1.hp, p1.ap);
printf("%s LV.%d HP.%d AP.%d \n", p2.name, p2.lv, p2.hp, p2.ap);
printf("%s LV.%d HP.%d AP.%d \n", p3.name, p3.lv, p3.hp, p3.ap);
printf("%s LV.%d HP.%d AP.%d \n", p4.name, p4.lv, p4.hp, p4.ap);
// (+ 가장 레벨이 높은 포켓몬의 이름과 레벨 출력)
POK max = p1;
if(max.lv < p2.lv){
max = p2;
}
if(max.lv < p3.lv){
max = p3;
}
if(max.lv < p4.lv){
max = p4;
}
printf("최대 레벨 : %d \n", max.lv);
printf("최대 레벨 포켓몬 : %s \n", max.name);
}
void quiz01_arr(){
POK p[4];
int i;
for(i = 0; i < 4; ++i){
printf("이름 : ");
scanf_s("%s", p[i].name, sizeof(p[i].name));
printf("%s의 레벨 : ", p[i].name);
scanf_s("%d", &p[i].lv);
p[i].hp = p[i].lv * 100;
p[i].ap = p[i].lv * (rand() % 10 < 2 ? 15 : 10);
}
for(i = 0; i < 4; ++i){
printf("%s LV.%d HP.%d AP.%d \n", p[i].name, p[i].lv, p[i].hp, p[i].ap);
}
POK max = p[0];
for(i = 1; i < 4; ++i){
if(max.lv < p[i].lv){
max = p[i];
}
}
printf("최대 레벨 : %d \n", max.lv);
printf("최대 레벨 포켓몬 : %s \n", max.name);
}
/*
1. print_info()
인자 : 포켓몬 1개
하는 일 : 해당 포켓몬의 모든 정보 printf()
리턴 : X
2. input_info()
인자 : X
하는 일 : 포켓몬 구조체 변수 선언 및 scanf_s() 로 입력받아서 정보 저장
리턴 : 포켓몬 구조체
*/
void print_info(POK p){
printf("이름 : %s \n", p.name);
printf("LV : %d \n", p.lv);
printf("체력 : %d \n", p.hp);
printf("공격력 : %d \n", p.ap);
}
POK input_info(){
POK p;
printf("이름 : ");
scanf_s("%s", p.name, sizeof(p.name));
printf("%s의 레벨 : ", p.name);
scanf_s("%d", &p.lv);
printf("%s의 체력 : ", p.name);
scanf_s("%d", &p.hp);
printf("%s의 공격력 : ", p.name);
scanf_s("%d", &p.ap);
return p;
}
/*
구조체변수명.필드명 : 직접 접근 연산자
구조체주소->필드명 : 간접 접근 연산자
(*주소).필드명
주소->필드명
*/
/*
level_up()
인자 : ?????
하는 일 : 인자로 들어온 포켓몬의 레벨을 1 증가
리턴 : X
*/
void level_up(POK*p){
//++(*p).lv;
++p->lv;
}
void quiz02(){
POK p1 = input_info();
//POK p2 = input_info();
print_info(p1);
//print_info(p2);
level_up(&p1);
print_info(p1);
}
typedef struct node {
int data;
struct node* next;
}N;
void ex01(){
N n1 = {10, NULL}, n2 = {20, NULL}, n3 = {30}, n4 = {40};
n1.next = &n2;
n2.next = &n3;
n3.next = &n4;
printf("n1의 주소 : %u, n1.next : %u \n", &n1, n1.next);
printf("n2의 주소 : %u, n2.next : %u \n", &n2, n2.next);
printf("n3의 주소 : %u, n3.next : %u \n", &n3, n3.next);
printf("n4의 주소 : %u, n4.next : %u \n", &n4, n4.next);
N* tmp = &n1;
// tmp 를 사용하여 4개 노드의 모든 data를 printf()
while(tmp){ // tmp != NULL
printf("%d \n", tmp->data);
tmp = tmp->next;
}
}
void main(){
//quiz01_arr();
//quiz02();
ex01();
}
'C > 구조체' 카테고리의 다른 글
괄호예제 & 포켓몬2 (0) | 2021.03.29 |
---|---|
도서관리1 (0) | 2021.03.29 |
구조체 기본 (0) | 2021.03.29 |
Comments