C언어 프로그래밍에서 코드를 작성하다보면 무작위의 숫자가 필요한 경우가 존재한다. 보통 무작위 숫자를 난수라고 표현한다. C언어에서 난수를 표현하기 위해서는 stdlib.h 헤더파일에 포함되어있는 rand()라는 함수를 사용하면 된다.
☞ rand()함수 사용법
#include <stdio.h>
#include <stdlib.h> // rand() 함수 포함 라이브러리
int main()
{
int random = 0; // 정수형 변수 선언
for (int i = 0; i < 10; i++) { // 10번 반복
random = rand()%9; // 난수 생성
printf("%d\n", random); // 출력
}
}
8번째 줄에 random = rand()%9; 라는 코드가 있다. 해석하면 rand() 함수에 의해 난수를 생성하고 그 숫자를 9로 나눈 나머지를 random 변수에 대입하는 코드다.
※ 알고가기
rand() 함수에 의해 생성되는 난수 : 0 ~ 32767
rand() 함수에 의해 생성된 난수를 9로 나눈 나머지(%)의 값은 0부터 8까지다. 이를 1부터 9까지 난수를 생성하고 싶을때는 다음과 같이 8번째 줄 코드를 변경한다. random = rand()%9 + 1; 이는 0부터 8까지 반환되는 난수에 1을 더해줌으로써 1부터 9까지 반환할 수 있도록 하는 코드다.
하지만 여기서 문제점이 발생한다. 분명 개발자가 원하는 난수를 생성하고 출력했지만 그 패턴(규칙)이 매번 일정하다는 거다. 즉 프로그램 실행 시(또는 반복문) 항상 같은 난수가 생성된다는거다. srand()라는 함수를 사용해서 시드를 생성하면 된다. srand(time(NULL));
time(NULL)은 1970년 1월 1일 이후 경과된 시간을 초 단위로 반환하는 함수다. 이로써 1초 단위로 매번 다른 시드값을 생성해 rand()함수를 호출하는 것이다. 물론 time()함수를 사용하기 위해서 #include <time.h>를 추가해줘야한다.
☞ 진정한 난수 생성코드
#include <stdio.h>
#include <stdlib.h> // rand()함수 포함 라이브러리
#include <time.h> // time()함수 포함 라이브러리
int main()
{
srand(time(NULL)); // 매번 다른 시드값 생성
int random = 0; // 정수형 변수 선언
for (int i = 0; i < 10; i++) { // 10번 반복
random = rand()%9; // 난수 생성
printf("%d\n", random); // 출력
}
}
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 변수와 함수에서의 const (0) | 2022.10.28 |
---|---|
C++ 난수 생성 std::random + 생성 시간 측정하는 std::chrono 라이브러리 (0) | 2022.10.24 |
C++ 데이터 타입(data type) (0) | 2022.10.23 |
C++ std::tuple 여러가지 타입들의 객체를 보관 / Structured binding (0) | 2022.10.12 |
std::variant와 std::monostate 여러가지 타입 중 한 가지의 객체를 보관 (0) | 2022.10.10 |