C언어 동물카드뒤집기 오류 해결해주세요ㅠㅠ

C언어 동물카드뒤집기 오류 해결해주세요ㅠㅠ

작성일 2024.03.23댓글 1건
    게시물 수정 , 삭제는 로그인 필요

동물 카드 뒤집기인데 자꾸 사진처럼 몇몇 동물이 누락 되네요 왜 그럴까요??




=================================================================



#include <stdio.h>
#include <time.h>
//서로 다른 동물 10마리(각 카드 2장씩)
//사용자로부터 2개의 입력값을 받음
//카드 뒤집어서 맞추기
//총 실패 횟수 알려줌




int arrayAnimal[4][5]; //카드 지도(20장의 카드)
int checkAnimal[4][5]; //뒤집혔는지 여부 확인
char * strAnimal[10];
void initAnimalArray();
void initAnimalName();
void suffleAnimal();
int getEmptyPostion();
int conv_pos_x(int x);
int conv_pos_y(int y);
void printAnimals();
void printQuestion();
int FoundAnimals();






int main(void) {
srand(time(NULL));


initAnimalArray();
initAnimalName();
suffleAnimal();


int failCount = 0; //실패횟수
while (1) {
int select1 = 0; //사용자가 선택한 1번째 수
int select2 = 0; //사용자가 선택한 2번째 수

printAnimals(); //동물 위치 출력
printQuestion(); //문제 출력 카드 지도
printf("뒤집을 카드 두 개를 고르시오 : ");
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++;
}


//모든 동물을 찾았는지 여부 1 : 참 0 : 거짓
if(FoundAnimals()==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 suffleAnimal() {


//동물이 4*5
//ㅁㅁㅁㅁㅁ
//ㅁㅁㅁㅁㅁ
//ㅁㅁㅁㅁㅁ
//ㅁㅁㅁㅁㅁ
//4:53:00


for (int i = 0; i < 10; i++) {
for (int j = 0; j < 2; j++) {
int pos = getEmptyPostion(); //비어있는 위치를 반환해줘
int x = conv_pos_x(pos);
int y = conv_pos_y(pos);
arrayAnimal[x][y] = i;


}
}
}




//좌표에서 빈공간 찾기
int getEmptyPostion() {
//ㅁㅁㅁㅁㅁ 0 1 2 3 4
//ㅁㅁㅁㅁㅁ 5 6 7 8 9
//ㅁㅁㅁㅁㅁ 10 11 12 13 14
//ㅁㅁㅁㅁㅁ 15 16 17 18 19


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;
}


//4:59:00
int conv_pos_x(int x) {
// 19 => (3,4)
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\n");
int seq = 0;
//ㅁㅁㅁㅁㅁ 0 1 2 3 4
//ㅁㅁㅁㅁㅁ 5 6 7 8 9
//ㅁㅁㅁㅁㅁ 10 11 12 13 14
//ㅁㅁㅁㅁㅁ 15 16 17 18 19




//5:11:00
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 FoundAnimals() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 5; j++) {
if (checkAnimal[i][j] == 0) {
return 0;
}
}
}
return 1; //모든 동물을 다 찾음


}




profile_image 익명 작성일 -

getEmptyPosition() 함수에 버그가 있습니다..

//좌표에서 빈공간 찾기 int getEmptyPostion() { //ㅁㅁㅁㅁㅁ 0 1 2 3 4 //ㅁㅁㅁㅁㅁ 5 6 7 8 9 //ㅁㅁㅁㅁㅁ 10 11 12 13 14 //ㅁㅁㅁㅁㅁ 15 16 17 18 19 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; }

소스코드에서 "// <-- 버그 위치" 라고 적힌 부분 봐주세요.

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

= 는 비교가 아니라 대입입니다. 비교는 == 입니다.

올바른 코드는 다음과 같습니다.

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

수정전 코드 실행

잘못된 코드로 일부 자리에 (null) 이 있습니다.

수정된 코드 실행.

잘못된 (null) 들이 없어서 정상 실행 됩니다.

수고하세요~

신기한 수학 정리 추천해주세요 ㅠㅠ...

... 추천해주세요ㅠㅠ 신문지의 두께는? 신문지 한 장이... 대기, 복잡한 해류, 야생동물들의 수와 변동, 심장과... 다른 언어로 번역할 수 있었다. 아라비아 학자들의 작품이...

수학신문 만드는법..!!

... 대답해주세요...제발료 ㅠㅠ. 1. 경제관련... 박물관, 동물원, 식물원, 실험소 등을 건설하였고, 특히 왕궁... 실제로 많은 부분에서 오류가 있다는 것이 알려졌다. 이러한...

판타지 소설 추천요

... 알려주세요ㅠㅠ 참고로 전 정령소설을 무진장... 나니아 연대기: 《나니아 연대기》는 전세계 29개 언어로... 단체나 동물 보호 단체, 지구를 수호하는 단체 등이나 아무튼...

판타지~~필독서~~추천!!

... 제게도 알려주세요ㅠㅠㅠㅠ 이계,현대물,뱀파이어류... 29개 언어로 번역되어 8,500만 부 이상 판매 된... 단체나 동물 보호 단체, 지구를 수호하는 단체 등이나 아무튼 정의를...

수학신문...도와주세여.....ㅠㅠ

... 알려주세요 1. 유클리드(Uclid) 기하학의 시조 우리가... 박물관, 동물원, 식물원, 실험소 등을 건설하였고, 특히... 실제로 많은 부분에서 오류가 있다는 것이 알려졌다....

보기에 즐거운! 판타지! 추천 좀요!

... 추천해주세요. 텍본 구할 수 있는 걸로 추천 좀...ㅠㅠ; 나니아 연대기: 《나니아 연대기》는 전세계 29개 언어로... 단체나 동물 보호 단체, 지구를 수호하는 단체 등이나...

프로그래머 조언 부탁드립니다.

... 알려주세요. 어느 개발분야로 진출하느냐에 따라 필요한 프로그래밍 언어가 달라진답니다 현재 C언어와 자료구조를 공부했다면 다음은 C++ 혹은 자바를 공부하는 게...

잼나는 판타지 무협 소설 추천 받아요~

... 추천해 주세요...ㅠㅠ 책방이 주변에 없거든요? 디게... 29개 언어로 번역되어 8,500만 부 이상 판매 된... 이쉬타르의 문: 차원이동물에 속한다. 그러나 한국의 퓨전 판타지같은...