1. 세 함수의 역할과 관계
컴퓨터는 진정한 의미의 우연을 만들지 못한다. 미리 정해진 복잡한 수열(의사 난수)에서 숫자를 하나씩 꺼내올 뿐이다.
- rand(): 미리 생성된 난수 목록에서 다음 숫자를 하나 꺼내오는 함수입니다. (0 ~ 32767 사이의 값 반환)
- srand(seed): 난수 목록을 생성하기 위한 '기준점(Seed)'을 설정하는 함수입니다. 똑같은 Seed를 넣으면 항상 똑같은 난수 순서가 나옵니다.
- time(NULL): 현재 시간을 초 단위 정수(Unix Time)로 반환합니다. 매초 값이 변하기 때문에 가장 대중적인 Seed 값으로 사용됩니다.
2. 왜 srand(time(NULL))을 같이 쓰는가?
만약 srand를 쓰지 않고 rand()만 호출하면, 프로그램을 껐다 켤 때마다 항상 같은 순서로 숫자가 나옵니다. (기본 Seed가 1로 고정되기 때문)
- 게임에서의 문제점: 몬스터가 드랍하는 아이템이 매번 똑같거나, 강화 확률이 실행할 때마다 고정되는 치명적인 버그가 발생합니다.
- 해결: srand((unsigned int)time(NULL));을 프로그램 시작 시 단 한 번 호출하여, 실행할 때마다 Seed를 시간값으로 바꿔줘야 합니다.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
srand((unsigned int)time(NULL));
for (int i = 0; i < 5; ++i)
{
int randomValue = rand() % 100;
cout << i + 1 << "번째 수 : " << randomValue << endl;
}
return 0;
}
'C언어 공부' 카테고리의 다른 글
| c언어 정렬 함수 qsort 함수 (0) | 2025.09.22 |
|---|---|
| C언어 기초 - 14. 동적할당의 개념 (1) | 2025.08.20 |
| C언어 기초 - 13. 구조체의 개념 (1) | 2025.08.20 |
| C언어 기초 - 12. 문자열 배열과 문자열 포인터 (& C언어의 메모리 영역) (5) | 2025.08.16 |
| C언어 기초 - 11. scanf 표준입력함수의 개념 (0) | 2025.08.16 |