Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Java
- Shell
- react
- Godot
- jetbrains
- RaspberryPi
- plugin
- 루비
- CPP
- Python
- gradle
- rubymine
- kotlin
- boj
- GitHub
- 개발노트
- Android
- IntelliJ
- JS
- Spring
- maven
- gnuplot
- ruby
- Vane
- OTLanguage
- error
- C
- OAuth
- Baekjoon
- ruby2d
Archives
- Today
- Total
PersesTitan(페르) 기술블로그
[C] c언어 난수 생성 구현 (rand(), random()) 본문
rand()
rand() 함수를 사용하기 위해서는 stdlib를 추가해주어야합니다.
#include <stdlib.h>
rand() 함수는 램던한 int 타입의 값을 반환해줍니다.
아래와 같이 그냥 사용하여도 램던한 값이 나오기는 하지만 코드를 다시 실행을 하면 처음 나왔던 램던한 값이 고정되어서 출력됩니다.
예시 코드
#include <stdio.h>
#include <stdlib.h>
int main() {
for (int i = 0; i < 10; ++i) {
printf("%d\n", rand());
}
return 0;
}
1차 실행 | 2차 실행 | 3차 실행 |
---|---|---|
해결방법
time.h를 추가하여 초기화 시켜주는 것이 일반적입니다.
#include <time.h>
다음과 같이 srand를 이용하여 램던 값을 초기화 시킬 수 있습니다.
예시 코드
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(NULL));
for (int i = 0; i < 10; ++i) {
printf("%d\n", rand());
}
return 0;
}
1차 실행 | 2차 실행 | 3차 실행 |
---|---|---|
이렇게 원하던 램던값을 구할 수 있었습니다.
random()
random()과 rand()의 차이는 random()은 long을 반환하고, rand()는 int을 반환하는 차이점이 존재합니다.
rand()에서 초기화할때는 srand를 사용하였지만 random()에서는 srandom를 사용하여 초기화를 하시면 됩니다.
예시 코드
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srandom(time(NULL));
for (int i = 0; i < 10; ++i) {
printf("%ld\n", random());
}
return 0;
}
범위 정하기
유명한 방법으로 나머지와 더하기를 이용하는 방법이 존재합니다.
rand() % (최대값-최소값-1) + 최소값 과 같은 범위를 지정할 수 있습니다.
1~10의 범위를 지정하고 싶다면, rand() % 10 + 1과 같은 방법으로 범위를 지정할 수 있습니다.
출력 예시
5
10
6
1
8
5
3
1
1
9
'Language > C' 카테고리의 다른 글
[C] 팩토리얼 함수 만들기 (2) | 2023.10.23 |
---|---|
[C] 동적 할당 (malloc, calloc, realloc, free) (0) | 2023.06.18 |
[C] 포맷 (format) 종류 정리 (0) | 2023.06.16 |
[C] 10진수 2진수로 변환 (특이하게 변환해보기) (0) | 2023.04.05 |
[C] C언어에서 배열 길이 구하기 (sizeof) (0) | 2023.04.05 |