inflearn logo
강의

Course

Instructor

C Programming - From Basics to Game Development

Project (extension)

질문있습니다!

375

mobics

1 asked

0

자꾸 알 수 없는 오류가 발생해서 여기저기 찾아보고 해결해보려고 헤더에 <stdlib.h>도 넣고 해봤고 나도코딩 님께서 올리신 소스코드를 그대로 복사 붙여넣기 해서 실행하는데도 아래 사진과 같은 상태로 에러가 나서 여쭤봅니다.

혹시 왜 에러가 나는지, 그리고 그 해결법을 알 수 있을까요..?

캡처.PNG

혹시 몰라 소스코드도 첨부합니다.

#include <stdio.h>

#include <time.h>

#include <stdlib.h>

// 10마리의 서로 다른 동물 (각 카드 2장씩)

// 사용자로부터 2개의 입력값을 받아서 -> 같은 동물 찾으면 카드 뒤집기

// 모든 동물 쌍을 찾으면 게임 종료

// 총 실패 횟수 알려주기

int arrayAnimal[4][5]; // 카드 지도 (20장의 카드)

char* strAnimal[10]; // 10개의 공간배열을 만드는데, 거기에 들어가는게 문자 포인터

int checkAnimal[4][5]; // 뒤집혔는지 여부 확인

void initAnimalArray();

void initAnimalName();

void shuffleAnimal();

int getEmptyPosition();

int conv_pos_x(int x);

int conv_pos_y(int y);

void printAnimals();

void printQuestion();

int foundAllAnimals();

int main(void)

{

srand(time(NULL));

initAnimalArray();

initAnimalName();

shuffleAnimal();

int failCount = 0; // 실패 횟수

while (1)

{

int select1 = 0; // 사용자가 선택한 처음 수

int select2 = 0; // 사용자가 선택한 두번째 수

printAnimals(); // 동물 위치 출력

printQuestion(); // 문제 출력 (카드 지도)

printf("뒤집을 카드를 2개 고르세요 : ");

scanf_s("%d %d", &select1, &select2);

if (select1 == select2) // 같은 카드 선택 시 무효

continue;

// 좌표에 해당하는 카드를 뒤집어 보고 같은지 안 같은지 확인

// 정수 좌표를 (x,y) 로 변환

int firstSelect_x = conv_pos_x(select1);

int firstSelect_y = conv_pos_y(select1);

int secondSelect_x = conv_pos_x(select2);

int secondSelect_y = conv_pos_y(select2);

// 카드가 뒤집히지 않았는지 확인하고 같은 동물인지 확인

if ((checkAnimal[firstSelect_x][firstSelect_y] == 0

&& checkAnimal[secondSelect_x][secondSelect_y] == 0)

&&

(arrayAnimal[firstSelect_x][firstSelect_y]

== arrayAnimal[secondSelect_x][secondSelect_y])

)

{

printf("\n\n빙고! : %s 발견!\n\n", strAnimal[arrayAnimal[firstSelect_x][firstSelect_y]]);

checkAnimal[firstSelect_x][firstSelect_y] = 1;

checkAnimal[secondSelect_x][secondSelect_y] = 1;

}

else // 다른 동물인 경우

{

printf("\n\n 땡!! (틀렸거나, 이미 뒤집힌 카드입니다)\n");

printf("%d : %s\n", select1, strAnimal[arrayAnimal[firstSelect_x][firstSelect_y]]);

printf("%d : %s\n", select2, strAnimal[arrayAnimal[secondSelect_x][secondSelect_y]]);

printf("\n\n");

failCount++;

}

if (foundAllAnimals() == 1)

{

printf("\n\n축하합니다! 모든 동물을 다 찾았네요 \n");

printf("지금까지 총 %d 번 실수하였습니다.\n", failCount);

break;

}

}

return 0;

}

void initAnimalArray()

{

for (int i = 0; i < 4; i++)

{

for (int j = 0; j < 5; j++)

{

arrayAnimal[i][j] = -1;

}

}

}

void initAnimalName()

{

strAnimal[0] = "원숭이";

strAnimal[1] = "하마";

strAnimal[2] = "강아지";

strAnimal[3] = "고양이";

strAnimal[4] = "호랑이";

strAnimal[5] = "사자";

strAnimal[6] = "돼지";

strAnimal[7] = "코끼리";

strAnimal[8] = "기린";

strAnimal[9] = "낙타";

}

void shuffleAnimal()

{

// ㅁㅁㅁㅁㅁ 0 1 2 3 4

// ㅁㅁㅁㅁㅁ 5 6 7 8 9

// ㅁㅁㅁㅁㅁ 10 11 12 13 14

// ㅁㅁㅁㅁㅁ 15 16 17 18 19

// 이 배열에서 빈 공간 두 곳에 랜덤으로 동물을 배치

for (int i = 0; i < 10; i++)

{

for (int j = 0; j < 2; j++)

{

int pos = getEmptyPosition(); // 비어있는 위치 반환

int x = conv_pos_x(pos);

int y = conv_pos_y(pos); // 반환한 값을 (x,y) 좌표로 변환

arrayAnimal[x][y] = i;

}

}

}

// 좌표에서 빈 공간 찾기

int getEmptyPosition()

{

while (1)

{

int randPos = rand() % 20; // 0~19 사이의 숫자 반환

// ex) 19 = (3,4)

int x = conv_pos_x(randPos);

int y = conv_pos_y(randPos);

if (arrayAnimal[x][y] == -1)

{

return randPos;

}

}

return 0; // int로 반환하는 함수이기 때문에 적은것이지, 큰 의미는 없음

}

int conv_pos_x(int x)

{

// ex) 19 = (3,4)

return x / 5;

}

int conv_pos_y(int y)

{

return y % 5; // y를 5로 나눈 나머지 값

}

void printAnimals()

{

printf("\n==================정답==================\n\n");

for (int i = 0; i < 4; i++)

{

for (int j = 0; j < 5; j ++)

{

printf("%8s", strAnimal[arrayAnimal[i][j]]);

}

printf("\n");

}

printf("\n========================================\n\n");

}

void printQuestion()

{

printf("\n\n(문제)\n");

int seq = 0;

for (int i = 0; i < 4; i++)

{

for (int j = 0; j < 5; j++)

{

// 카드를 뒤집어서 정답을 맞혔으면 '동물 이름'

if (checkAnimal[i][j] != 0)

{

printf("%8s", strAnimal[arrayAnimal[i][j]]);

}

// 정답을 못 맞혔으면 다시 뒷면 -> 위치를 나타내는 숫자

else

{

printf("%8d", seq);

}

seq++;

}

printf("\n");

}

}

int foundAllAnimals()

{

for (int i = 0; i < 4; i++)

{

for (int j = 0; j < 5; j++)

{

if (checkAnimal[i][j] == 0)

{

return 0;

}

}

}

return 1;

}

 

 

c

Answer 1

1

oortcloud983612

컴파일러 버전이 달라서 그런 것 같습니다.
strAnimal 변수 선언시
const char* strAnimal[10] 으로 선언해주시면 될 것 같습니다.

안녕하세요 7장 포인터에 관해 질문드립니다.

0

63

1

8-8 연장전 / 소스코드 공유해드려요. 참고하세요!

0

64

0

섹션6. 프로젝트 소스코드 올려드려요.

0

93

1

영상속에서 배운 코드들을 Git Repository에 올려두될까요?

0

79

1

경찰서 조서 프로젝트 문의

0

104

1

경찰관 조서 프로젝트

0

142

1

scanf

0

92

1

제대로 작성한것 같은데 빌드가 않됩니다.,

0

170

1

구문 오류 C2059

0

397

1

컴파일 시 fatal error C1010 발생

0

284

1

반환값이 없는 함수

0

215

1

반올림 되는건가요?

0

252

1

맥으로수강

0

193

1

10-2

0

257

1

질문이 있습니다

0

341

1

3-3 for 반복문 ++i 일때 질문입니다.

0

244

1

6-4(배열 파트 '문자 vs 문자열') sizeof 예제 다르게 출력되는 분들 참고하세요.

1

411

0

함수 선언과 정의를 동시에 해도 되나요?

0

1076

1

빌드오류가 있다고 나오고, 지정된 파일을 찾을 수 없다고 오류가 나옵니다..

0

403

1

안녕하세요 좋은 강의와 책 감사드립니다!! 다름이 아니라 명령어를 실행시켰을 때 저런식으로 나와서 질문드립니다

0

933

0

질문드립니다

0

384

1

scanf_s(" %d", &answer); 이후 바로 종료

0

308

0

질문 드립니다.

0

428

1

sizeof에서 오류가 나는 것 같아서 물어보고 싶습니다.

0

562

0