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 |