C

C언어 (12)

사회적가치누리 2024. 11. 23. 14:37

고양이 수집 게임 프로젝트

 

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