• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

아빠는 대머리 게임 프로젝트 이 오류 해결해주세요

21.04.18 17:04 작성 조회수 225

1

영상에 나온 코드를 다 따라서 쓰고 확인했는데 시도 옆에 물약 번호가 안뜨네요 

#include <stdio.h>

#include <time.h>

int main(void)

{

srand(time(NULL));

printf("\n\n === 아빠는 대머리 게임 === \n\n");

int answer; // 사용자 입력값

int treatment = rand()% 4; // 발모제 선택 (0-3)

int cntShowBottle = 0; // 이번 게임에 보여줄 병 갯수

int prevCntshowBottle = 0; //앞 게임에 보여준 병 갯수

// 서로 보여주는 병 갯수를 다르게 하여 정답률 향상 (처음에 2개 -> 다음엔 3개 ...)

// 3번의 기회 (3번의 발모제 투여 시도)

for (int i = 1; i <= 3; i++)

{

int bottle[4] = { 0, 0, 0, 0 }; //4개의 병

do {

cntShowBottle = rand() %2 + 2; //보여줄 병 갯수 (0~1, +2 -> 2,3)

} while (cntShowBottle = prevCntshowBottle);

int islncluded = 0; //보여줄 병 중에 발모제가 포함되었는 여부 (1 : 포함)

printf(" > %d 번째 시도 : ", i);

//보여줄 병 종류 선택

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

{

int randBottle = rand() % 4; //0-3

//아직 선택되지 않은 병이면, 선택처리

if (bottle[randBottle] == 0)

{

bottle[randBottle] = 1;

if (randBottle == treatment)

{

islncluded = 1;

}

}

// 이미 선택된 병이면, 중복이므로 다시 선택

else

{

j--;

}

}

//사용자에게 문제 표시

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

{

if (bottle[k] == 1)

printf("%d", k + 1);

}

printf(" 물약을 머리에 바릅니다\n\n");

if (islncluded == 1)

{

printf("   >> 성공 ! 머리가 났어요 !!\n");

}

else

{

printf("   >> 실패 ! 머리가 나지 않앗어요... ㅠㅠ\n");

}

printf("\n ... 계속 하려면 아무키나 누르세요 ...");

getchar();

}

printf("\n\n발모제는 몇 번일까요? ");

scanf_s("%d", &answer);

if (answer == treatment + 1)

{

printf("\n >> 정답입니다!\n");

}

else

{

printf("\n >> 땡! 틀렸어요, 정답은  %d 입니다\n", treatment + 1);

}

return 0;

}

답변 1

답변을 작성해보세요.

0

haon님의 프로필

haon

2021.04.19

18줄의 do while문이

while (cntShowBottle == prevCntShowBottle);

가 

while (cntShowBottle = prevCntShowBottle);

로 되어있었습니다.

#include <stdio.h>

#include <time.h>

int main(void)

{

srand(time(NULL));

printf("\n\n === 아빠는 대머리 게임 === \n\n");

int answer; // 사용자 입력값

int treatment = rand() % 4; // 발모제 선택 (0-3)

int cntShowBottle = 0; // 이번 게임에 보여줄 병 갯수

int prevCntshowBottle = 0; //앞 게임에 보여준 병 갯수

// 서로 보여주는 병 갯수를 다르게 하여 정답률 향상 (처음에 2개 -> 다음엔 3개 ...)

// 3번의 기회 (3번의 발모제 투여 시도)

for (int i = 1; i <= 3; i++)

{

int bottle[4] = { 0, 0, 0, 0 }; //4개의 병

do {

cntShowBottle = rand() % 2 + 2; //보여줄 병 갯수 (0~1, +2 -> 2,3)

} while (cntShowBottle == prevCntshowBottle);

int islncluded = 0; //보여줄 병 중에 발모제가 포함되었는 여부 (1 : 포함)

printf(" > %d 번째 시도 : ", i);

//보여줄 병 종류 선택

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

{

int randBottle = rand() % 4; //0-3

//아직 선택되지 않은 병이면, 선택처리

if (bottle[randBottle] == 0)

{

bottle[randBottle] = 1;

if (randBottle == treatment)

{

islncluded = 1;

}

}

// 이미 선택된 병이면, 중복이므로 다시 선택

else

{

j--;

}

}

//사용자에게 문제 표시

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

{

if (bottle[k] == 1)

{

printf("%d", k + 1);

}

}

printf(" 물약을 머리에 바릅니다\n\n");

if (islncluded == 1)

{

printf("   >> 성공 ! 머리가 났어요 !!\n");

}

else

{

printf("   >> 실패 ! 머리가 나지 않앗어요... ㅠㅠ\n");

}

printf("\n ... 계속 하려면 아무키나 누르세요 ...");

getchar();

}

printf("\n\n발모제는 몇 번일까요? ");

scanf_s("%d", &answer);

if (answer == treatment + 1  )

{

printf("\n >> 정답입니다!\n");

}

else

{

printf("\n >> 땡! 틀렸어요, 정답은  %d 입니다\n", treatment + 1);

}

return 0;

}

김정현님의 프로필

김정현

질문자

2021.04.19

감사합니다