C언어/자구알

[C] 프로젝트 완성, 후기

Jawy 2024. 1. 28. 15:18

stack.c
0.00MB

 

stack으로 구현하는 바질 키우기 게임이 완성되었다.

 

해당 프로젝트를 진행하며 알게 된 부분들을 정리해보자.


우선 기본적으로 이번 프로젝트에서는

 

사용자로에게 두 키워드를 주어주면, 사용자가 그 중 하나를 선택(입력)한다.

 

그러면 그 키워드에 해당하는 문장이 출력된다.

 

이를 구현하는 것이 생각보다 힘들었다.

 

파이썬에서처럼 딕셔너리 자료형을 사용해서 구현할 수 있다면 편리했을텐데,

 

C에는 따로 그런 자료형이 없어서 직접 만들어 줄 수밖에 없었다.

#include <stdio.h>
#include <string.h>

//인풋을 저장해놓은 text에 그에 대응하는 value값을 저장
void game(stacktype* s, char* text, char* key[], char* value[], char* neg_key[], char* neg_value[], int size, int* flag) {
	
	for (int index = 0; index < size; index++) {
		if (!strcmp(text, key[index])) {
			strcpy(text, value[index]);
			pos_choice(s, text); //체력 올라 함수
			*flag = 0;
			return;
		}
		else if (!strcmp(text, neg_key[index])) {
			strcpy(text, neg_value[index]);
			neg_choice(s, text); //체력 줄어 함수
			*flag = 0;
			return;
		}
	}
	printf("\n입력 오류! 다시 입력바람\n\n");
	*flag = 1;
}

 

그래서 직접 딕셔너리처럼 동작하게 구현을 해보았는데, 

 

구현 시 핵심적으로 다룬 부분은,

 

key 값을 나열한 배열을 따로 만들고, value 값을 나열한 배열을 따로 만드는데,

 

이때 대응되는 key와 value의 값을 각각의 배열에서 같은 인덱스 번호에 저장하는 것이었다.


또한 그 이전에 문자열들을 배열에 저장하는 것부터 난관이었다.

 

지금까지 내용들로 미루어보면, 문자열 자체가 문자들의 배열인데,

 

문자열들에 대한 배열은 어떻게 구현해야할 지 막막했다.

 

 

그 해답은 2차원 배열에 있었다.

 

그런데 2차원 배열을 구현할 때, 일반적으로 배열 형태로 선언해서 구현하는 방식이 있었고,

 

포인터를 이용하는 방식이 있었다.

 

결과적으로 포인터를 사용해서 구현하였는데, 이에 대해서는 따로 포스팅할 예정.

 

+ 내가 작업한 환경에서는 한글 한 문자의 바이트 수는 3byte였다. (배열의 크기 지정할 때 애먹었음)


또한 이번 프로젝트를 진행하며 기초적인 문자열 처리 함수들에 대해서도 익힐 수 있었다.

 

실제로 사용한 strcpy와 strcmp를 포함해,

 

<string.h> 헤더 파일의 함수들에 대해서도 한번 정리가 필요할 듯하다.


마지막으로 출력 화면을 초기화하는데 사용된 system 함수와 시간이 경과하도록하는 sleep 함수, 그리고 입력 버퍼를 초기화해주는 fflush 함수 등 유용한 함수들을 제공하는 <windows.h> 헤더 파일과

 

난수와 관련된 작업을 도와주는 헤더파일 <stdlib.h>까지 모두 다뤄보았다.

 

해당 헤더들에 대해서도 간단하게 정리하고 넘어갈 듯하다.


아주 간단한 프로젝트였지만,

 

막상 만들어보니 생각보다 모르는 함수들이 많았고,

 

예상치 못하는 부분에서 막히는 일도 있었다.

 

여러 프로그램들을 만들어보며 기본기를 익혀가도록 하쟈.

'C언어 > 자구알' 카테고리의 다른 글

[C] 프로젝트 설계  (2) 2024.01.09
[C] stack을 사용한 초간단 프로젝트 (이론, 개요)  (0) 2024.01.09