-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
해결됨
질문있습니다
20.02.09 00:02 작성 조회수 151
0
아무리 영상을 다시 재생하면서 봐도 똑같이 적었는데 실행시키면 문제 번호가 짝수만 나오게 됩니다 왜 그러는걸까요
#include <stdio.h>
#include <time.h>
int arrayAnimal[4][5];
int checkAnimal[4][5];
char * strAnimal[10];
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 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;
int firstSelect_x = conv_pos_x(select1);
int firstSelect_y = conv_pos_x(select1);
int secondSelect_x = conv_pos_x(select2);
int secondSelect_y = conv_pos_x(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()
{
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);
arrayAnimal[x][y] = i;
}
}
}
int getEmptyPosition()
{
while (1)
{
int randPos = rand() % 20;
int x = conv_pos_x(randPos);
int y = conv_pos_y(randPos);
if (arrayAnimal[x][y] == -1)
{
return randPos;
}
}
return 0;
}
int conv_pos_x(int x)
{
return x / 5;
}
int conv_pos_y(int y)
{
return 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;
}
답변을 작성해보세요.
1
나도코딩
지식공유자2020.02.09
안녕하세요^^
강의 12분 58초 부분을 보시면 되겠네요.
printQuestion함수에 seq++ 부분이 2번 있어서 2씩 증가한답니다. else 문 안에 seq++ 을 seq 로만 바꿔주시면 됩니다.
감사합니다.
0
나도코딩
지식공유자2020.02.10
안녕하세요?
^^ 잘못된 코드가 있는데요, 아래 부분을 주석 설명대로 고쳐보시겠어요?
감사합니다.
int firstSelect_x = conv_pos_x(select1);
int firstSelect_y = conv_pos_x(select1); // conv_pos_y 로 바뀌어야 합니다
int secondSelect_x = conv_pos_x(select2);
int secondSelect_y = conv_pos_x(select2); // conv_pos_y 로 바뀌어야 합니다
0
답변 3