장문이라 보기 불편하시겠지만 한번만 도와주세요 ㅜㅜ
c언어에서 헤더파일을 이용해 소스코드를 만드는 상황입니다.
헤더파일은 아래에 적어놨고 헤더파일 내 main함수를 int hang(){}형태로 바꿔 놓았습니다.
문제는
소스코드에서 main함수에
int main() {
hang();
return 0;
}
형태로 헤더파일을 불러와 실행시키면 정상적으로 작동하는데
int main() {
int a;
scanf_s("%d", &a);
switch (a) {
case 1:
hang();
}
return 0;
}
형태로 실행시키면 오류가 발생한다는 점입니다.
헤더파일을 수정하지도 않았는데 switch문 (if문 while문을 사용해봐도 똑같음..)을 사용하니 오류가 발생하는 이유를 도통 모르겠습니다. 이유가 뭔가요..?
아래는 헤더파일입니다
//함수
void game_start();
void game_set();//game 진행상태 출력
void check_word(char input_word);
void prevent_overlap(char input_word);
void print_input_word();
void decide_clear();
int my_strlen(char* string);
#define word_num 20
//전역 변수
char ans[30];
char dic[word_num][15] = { {"rhythm"}, {"spring"}, {"earthquake"}, {"wireless"}, {"planetarium"},
{"okay"}, {"beautiful"},{"termproject"},{"hard"}, {"complexity"},{"mandate"},{"profitable"},
{"invulnerable"},{"bear"},{"dry"},{"jazz"},{"kite"},{"apple"},{"alphabet"},{"part"} };
char input_word;//입력받은 알파벳
int selected_num;//임의로 선택된 dic 단어
int life = 10;//기회
int p = 0;//ans의 위치, 횟수
int t, judge;
int i, j, hap_miss;
int hang(void) {
game_start();
do {
hap_miss = 0;
printf("Life: %d\n", life);
game_set();
print_input_word();
printf("알파벳을 입력하세요:");
scanf_s("%c", &input_word, 1);
getchar();
prevent_overlap(input_word);//중복여부 판별
check_word(input_word);//단어의 속성 판별
decide_clear();//게임의 종료 여부 판
Sleep(1500);//화면 Clean
system("cls");
} while (t < 2);
return t;
}
void game_start() {
printf("★☆행맨게임★☆\n\n");
Sleep(2000);
system("cls");
p = 0;
t = 0;
life = 10;
do {
ans[0] = 0;
for (i = 1; i < 30; i++)ans[i] = '\0';
t = 1;
} while (t == 0);
srand((unsigned)time(NULL));
selected_num = rand() % word_num;
}
void game_set() {
for (i = 0; i < my_strlen(dic[selected_num]); i++) {
printf("_ ");
for (j = 0; ans[j] != '\0'; j++) {
if (dic[selected_num][i] == ans[j]) printf("\b\b%c ", dic[selected_num][i]);
}
}
printf("총 %d글자입니다!", i);
}
void prevent_overlap(char input_word) {//중복된 단어 체크
judge = 0;
for (i = 0; ans[i] != '\0'; i++) {
if (ans[i] == input_word) {
judge = 1;
}
}
if (judge == 1) {
system("cls");
printf("중복된 알파벳을 입력하셨습니다..\n");
Sleep(1000);
system("cls");
hap_miss++;
}
else {
ans[p] = input_word;
p++;
}
}
void check_word(char input_word) {//단어가 맞았는지 틀렸는지 체크
judge = 0;
for (i = 0; i < my_strlen(dic[selected_num]); i++) {
if (ans[p - 1] == dic[selected_num][i]) {
judge = 1;
}
}
if (judge == 0) {
if (hap_miss == 0) {
system("cls");
printf("틀렸습니다..\n");
Sleep(1000);
system("cls");
}
printf("Life가 1 감소합니다..");
life -= 1;
}
else {
if (hap_miss == 0)printf("맞았습니다!");
else {
printf("Life가 1 감소합니다..");
life -= 1;
}
}
}
void decide_clear() {
judge = 0;
for (i = 0; i < my_strlen(dic[selected_num]); i++) {
for (j = 0; ans[j] != '\0'; j++) {
if (dic[selected_num][i] == ans[j]) judge += 1;
}
}
if (life > 0) {
if (judge == my_strlen(dic[selected_num])) {
system("cls");
printf("...\n");
Sleep(1000);
printf("....\n");
Sleep(1000);
printf(".....\n");
Sleep(1000);
printf("Game Clear!");
Sleep(2000);
system("cls");
t = 2;
}
}
else {
system("cls");
printf("...\n");
Sleep(1000);
printf("....\n");
Sleep(1000);
printf(".....\n");
Sleep(1000);
printf("\nGame Over..\n");
printf("정답은: %s", dic[selected_num]);
Sleep(2000);
system("cls");
t = 3;
}
}
void print_input_word() {//입력된 단어 출력
printf("\n지금까지 입력한 단어:");
for (i = 0; ans[i] != '\0'; i++) printf("%c ", ans[i]);
printf("\n");
}
int my_strlen(char* string) {
int count = 0;
while (string[count] != '\0')count++;
return count;
}