인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

ms님의 프로필 이미지
ms

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

로또 번호 생성기

숫자 고르기 중복 질문

작성

·

221

0

void ChooseLotto(int numbers[])

{

srand((unsigned)time(0));

int count = 0;

bool overlap;

while (count < 6)

{

int randValue = 1 + (rand() % 45);

overlap = false;

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

{

if (randValue == numbers[i])

overlap = true;

break;

}

if (overlap)

continue;

numbers[count] = randValue;

count++;

}

Sort(numbers, 6);

}

강의와 달리 저는 중복을 체크하는 found 값을 overlap이란 변수명으로 whil문 밖에서 선언하고, while을 돌때마다 false로 갱신해주는 방법으로 함수를 짜봤는데, 중복을 못걸러내는 문제가 발생했습니다.
제가 보기엔 강의에서의 코드와 거의 차이가 없는데 왜 중복을 못거르는 문제가 발생하는지 잘 모르겠습니다.

답변 1

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

if (randValue == numbers[i])
overlap = true;
break;

살짝 보니 저 부분이 수상한데요.
if 와 무관하게 break가 100% 확률로 실행되고 있습니다.
C++은 파이썬이랑 다르게 Indentation(스페이스나 탭으로 띄워쓴 것)이 아무런 영향을 주지 않습니다.

아마도 의도하신 코드는

if (randValue == numbers[i])
{
  overlap = true;
  break;
}

이었을 것 같네요. 

ms님의 프로필 이미지
ms

작성한 질문수

질문하기