고양이 수집 게임 프로젝트
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(time(NULL));
initCats();
while (1)
{
printf("두근두근~! 어느 고양이의 집사가 될까요?\n아무 키나 눌러서 확인하세요!");
getchar();
int selected = rand() % 5; // 0~4 사이의 숫자 반환
printCat(selected); // 뽑은 고양이 정보 출력
collection[selected] = 1; // 고양이 뽑기 처리
int collection = checkCollection();
if (collection == 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 = 2;
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 = 4;
cats[3].character = "밥을 많이먹음";
cats[3].level = 6;
cats[4].name = "고냥이";
cats[4].age = 8;
cats[4].character = "사나움";
cats[4].level = 7;
}
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)
{
printf("\n\n 축하합니다 ! 모든 고양이를 다 모았어요. 열심히 키워주세요.\n\n");
}
return collectAll;
}
파일입출력
파일 쓰기 fputs
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#define MAX 10000
int main(void)
{
char line[MAX]; // char line[10000]
FILE* file = fopen("C:\\C\\test1.txt", "wb"); // \를 2개써야함
// 주 드라이버 (C:\)에는 생성이 정상적으로 이루어지지 않는다.
// 하위 디렉토리를 이용 C:\\C\\
// r : 읽기전용 w : 쓰기전용 a : 이어쓰기
// t : 텍스트 b : 바이너리 데이터
if (file == NULL)
{
printf("파일 열기 실패\n");
return 1;
}
fputs("fputs 를 이용해서 글을 적어볼께요\n", file);
fputs("잘 적히는지 확인해주세요\n", file);
// 파일을 열고 나서 닫지 않은 상태에서 어떤 프로그램에 문제가 생기면?
// 데이터 손실 발생 가능 / 그래서 항상 파일을 닫아주는 습관 필요
fclose(file);
return 0;
}
파일 읽기 fgets
// 파일 불러오기
FILE* file = fopen("C:\\C\\test1.txt", "rb");
if (file == NULL)
{
printf("파일 열기 실패\n");
return 1;
}
while (fgets(line, MAX, file) != NULL)
{
printf("%s", line);
}
또 다른 파일 쓰기 fprintf
int num[6] = { 0,0,0,0,0,0 };
int bonus = 0;
char str1[MAX];
char str2[MAX];
FILE* file = fopen("C:\\C\\test2.txt", "wb");
if (file == NULL)
{
printf("파일 열기 실패\n");
return 1;
}
fprintf(file, "%s %d %d %d %d %d %d\n", "추첨번호 ", 1, 2, 3, 4, 5, 6);
fprintf(file, "%s %d\n", "보너스번호 ", 7);
fclose(file);
return 0;
file = NULL > X 오타 file == NULL O
또 다른 파일 쓰기
#define _CRT_SECURE_NO_WARNINGS 를 맨위에 적어줘야함.
int num[6] = { 0,0,0,0,0,0 };
int bonus = 0;
char str1[MAX];
char str2[MAX];
FILE* file = fopen("C:\\C\\test2.txt", "rb");
if (file == NULL)
{
printf("파일 열기 실패\n");
return 1;
}
fscanf(file, "%s %d %d %d %d %d %d",str1,
&num[0], &num[1], &num[2], &num[3], &num[4], &num[5]);
printf("%s %d %d %d %d %d %d\n", str1,
num[0], num[1], num[2], num[3], num[4], num[5]);
fscanf(file, "%s %d", str2, &bonus);
printf("%s %d\n", str2, bonus);
fclose(file);
return 0;
비밀 일기 프로젝트
getchar() : 엔터를 입력받아야 동작.
getch() : 키 입력 시 바로바로 동작.
if문에다가 ;넣는 실수 금지
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MAX 10000
int main(void)
{
char line[MAX]; // 파일에서 불러온 내용을 저장할 변수
char contents[MAX]; // 일기장에 입력할 내용
char password[20]; // 비밀번호 입력
char c; // 비밀번호 입력 할 때 키값 확인용
printf("'비밀일기'에 오신 것을 환영합니다\n");
printf("비밀번호를 입력하세요 : ");
int i = 0;
while (1)
{
c = getch();
if (c == 13) // Enter -> 비밀번호 입력 종료
{
password[i] = '\0';
break;
}
else
{
printf("*");
password[i] = c;
}
i++;
}
printf("\n\n === 비밀번호 확인 중... ===\n\n");
if (strcmp(password, "skehzheld") == 0) // 비밀번호 일치
{
printf(" === 비밀번호 확인 완료 === \n\n");
char* fileName = "C:\\C\\secretdiary.txt";
FILE* file = fopen(fileName, "a+b");
// 파일이 없으면 생성, 파일이 있으면 append 를 한다 (뒤에서부터 내용 추가)
if (file == NULL)
{
printf("파일 열기 실패\n");
return 1;
}
while (fgets(line, MAX, file) != NULL)
{
printf("%s", line);
}
printf("\n\n 내용을 계속 작성하세요. 종료하시려면 EXIT 를 입력하세요.\n\n");
while (1)
{
scanf("%[^\n]", contents); // 세 줄(\n)이 나오기 전까지 읽어들임 (한 문장)
getchar(); // Enter 입력 (\n) Flush 처리
if (strcmp(contents, "EXIT") == 0)
{
printf("비밀일기 입력을 종료합니다\n\n");
break;
}
fputs(contents, file);
fputs("\n", file); // 엔터를 위에서 무시 처리 하였으므로 임의로 추가
}
fclose(file);
}
else
{
printf(" === 비밀번호가 틀렸어요 ===\n\n");
printf(" 꺅!! 당신 누구야?!! 감히 내 일기장을 !!!\n\n");
}
return 0;
}
'C' 카테고리의 다른 글
C언어(11) (0) | 2024.11.21 |
---|---|
C언어(10) (0) | 2024.11.20 |
C언어(9) (0) | 2024.11.19 |
C언어(8) 기초8 (0) | 2024.11.18 |
C언어(7) 기초7 (0) | 2024.11.16 |