이번 포스팅에서는 난수를 생성할 때 사용하는 rand() 함수에 대해 다뤄보도록 하겠습니다.
기본적으로 rand() 라이브러리는 stdlib.h 에 포함되어 있으므로 시작할 때
#include<stdio.h>
#include<stdlib.h>
전처리기로 stdio.h와 stdlib.h를 같이 호출해주셔야 합니다.
난수를 생성하는 방법은 간단한데요.
아래와 같이 rand()라고만 작성해주시면 정수형 int의 출력범위에서 임의의 값을 하나 출력해줍니다.
#include<stdio.h>
#include<stdilb.h>
int main(void)
{
for(int i=0; i < 5; i++)
{
printf("%d\n", rand());
}
return 0;
}
여기서 난수 출력 범위를 수정하고 싶다면?
rand() % 5 : 0~4 중에 한가지 수를 출력
rand() % 5 + 1: 1~5 중에 한가지 수를 출력
rand() % ((150-100)+1) + 100: 100~150 중에 한가지 수를 출력
범위지정법은 rand() % ((마지막값-시작값)+1) + 시작값
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
for(int i = 0; i < 5; i++)
{
printf("%d\n", rand() % 5); // 0~4중에 하나 출력
}
printf("===================\n");
for (int i = 0; i < 5; i++)
{
printf("%d\n", rand() % 5 + 1); // 1~5중에 하나 출력
}
printf("===================\n");
for (int i = 0; i < 5; i++)
{
printf("%d\n", rand() % ((150-100) + 1) + 100); // 100~150중에 하나 출력
}
return 0;
}
그런데....
해당 코드를 계속 실행보시다보면 난수인데 왜 결과값이 항상 똑같지? 라는 의문이 드실겁니다.
이를 해결하려면 SEED 값을 바꿔줘야 합니다.
방법은 아래와 같습니다.
1. time() 라이브러리를 사용하기 위해 전처리기에 time.h 를 추가해줍니다.
2. srand(time(0))으로 선언을 해서 rand()의 seed 값을 바꿔줍니다.
3. 그럼 이제 매 실행시마다 같았던 난수값이 변경되는걸 확인하실 수 있습니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
srand(time(0)); // 난수의 시드 초기화
for(int i = 0; i < 5; i++)
{
printf("%d\n", rand() % 5); // 0~4중에 하나 출력
}
printf("===================\n");
for (int i = 0; i < 5; i++)
{
printf("%d\n", rand() % 5 + 1); // 1~5중에 하나 출력
}
printf("===================\n");
for (int i = 0; i < 5; i++)
{
printf("%d\n", rand() % ((150-100) + 1) + 100); // 100~150중에 하나 출력
}
return 0;
}
이상으로 rand() 라이브러리를 정복해보았습니다.
그럼 오늘도 즐거운 코딩!
반응형
'코딩 | 개념 정리 > C' 카테고리의 다른 글
[C언어] 1부터 n까지의 합 구하기 (0) | 2021.04.20 |
---|---|
[C언어] 정적 변수 활용 - 난수 생성하기 (0) | 2021.04.19 |
[C언어] 로그인 비밀번호 검사하기 (0) | 2021.04.19 |
[C언어] 주사위를 던져 각각의 면의 등장 횟수 구하기 (0) | 2021.04.17 |
[C언어] 각 연산의 횟수를 기억하는 계산기 (0) | 2021.04.17 |