1. 랜덤 숫자 구하기
랜덤 숫자는 rand() 함수를 사용하여 구합니다
(rand() - 0과 RAND_MAX(32767) 사이의 난수 정수를 반환하는 함수)
int nNum1 = rand();
int nNum2 = rand();
int nNum3 = rand();
std::cout << nNum1 << "\n";
std::cout << nNum2 << "\n";
std::cout << nNum3 << "\n";
0 ~ 32767사이의 난수 3가지가 출력되었습니다.
하지만 이렇게만 구현하면 여러번 반복해서 실행해도 계속 같은 값의 난수만 출력됩니다.
※ 이 증상을 해결하려면 srand()와 time()을 활용해야합니다.
srand((unsigned int)time(NULL));
int nNum1 = rand();
int nNum2 = rand();
int nNum3 = rand();
std::cout << nNum1 << "\n";
std::cout << nNum2 << "\n";
std::cout << nNum3 << "\n";
rand() 함수 실행 전 srand()와 time()을 활용한 구문을 추가해주면 여러번 실행해도 계속 다른 난수가 출력됩니다.
srand() 함수는 rand() 함수를 초기화 시키는 역할을 하고 time(NULL)은 현재 시간을 반환합니다.
즉, 시간은 계속 변하니 계속해서 다른 숫자가 출력되는 것입니다.
2. 랜덤 숫자의 최대값 지정하기
랜덤 숫자의 최대값 지정은 나머지 연산자(%)를 활용합니다.
(나머지 연산자(%)는 값을 나누고 남은 나머지를 반환하는 연산자입니다)
srand((unsigned int)time(NULL));
int nNum1 = rand() % 5;
int nNum2 = rand() % 5;
int nNum3 = rand() % 5;
std::cout << nNum1 << "\n";
std::cout << nNum2 << "\n";
std::cout << nNum3 << "\n";
rand() % 5로 지정하면 0~4사이의 값만 출력됩니다.
아무리 큰 수를 나눈다고 해도 몫보다 나머지가 크거나 같을 수 없으니 이것을 활용합니다.
3. 랜덤 숫자의 범위 지정하기
랜덤 숫자의 범위 지정은 2번에서 사용했던 나머지 연산자(%)를 응용하여 구현합니다.
srand((unsigned int)time(NULL));
int nNum1 = rand() % 5 + 1;
int nNum2 = rand() % 5 + 1;
int nNum3 = rand() % 5 + 1;
std::cout << nNum1 << "\n";
std::cout << nNum2 << "\n";
std::cout << nNum3 << "\n";
rand() % 5로 지정하면 0~4사이의 값만 출력되는데 이 값에 1을 더하면 1 ~ 5사이의 값이 됩니다.
2를 더하면 2 ~ 6사이의 값이 되겠죠? 이런식으로 최소값, 최대값의 범위도 지정할 수 있습니다.
이걸 응용하여 [ rand() % 45 + 1 ] 로 설정하면 간단하게 랜덤한 로또 번호도 구해볼 수 있습니다.
[C++/MFC] rand()함수를 이용하여 로또 번호 생성해보기
[C / C++] 난수, 랜덤 숫자 구하기 rand() 1. 랜덤 숫자 구하기 랜덤 숫자는 rand() 함수를 사용하여 구합니다 (rand() - 0과 RAND_MAX(32767) 사이의 난수 정수를 반환하는 함수) int nNum1 = rand(); int nNum2..
dev-drive.tistory.com
'C++, MFC' 카테고리의 다른 글
[C++/MFC] 텍스트 파일의 인코딩 확인하는 방법 (0) | 2022.09.16 |
---|---|
[MFC] 재배포 패키지 없이 프로그램 배포하는 방법 (0) | 2022.08.29 |
[C++/MFC] rand()함수를 이용하여 로또 번호 생성해보기 (0) | 2022.08.28 |
[C++ / MFC] 실행중인 프로세스 찾기 / 종료시키기 (0) | 2022.08.09 |
[C++ / MFC] 레지스트리 값 저장, 불러오기 (RegCreateKeyEx) (0) | 2022.08.06 |
댓글