ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1078) N
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (184)
      • Unreal (69)
      • Unity (104)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (236) N
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (56) N
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (351) N
      • C++ (168)
      • C# (90)
      • Java (9)
      • Python (35) N
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (10)
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • Unity
  • 함수
  • 클래스
  • 티스토리챌린지
  • 그래픽스
  • 문자열
  • string
  • C
  • 오블완
  • 알고리즘
  • c#
  • 배열
  • 백준
  • 유니티
  • C++
  • 언리얼
  • 포인터
  • python
  • 파이썬
  • SQL

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

C 난수 생성
프로그래밍 언어/C++

C 난수 생성

2022. 10. 24. 10:27

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 랜덤 - 난수 생성하기 (tistory.com)

저작자표시 (새창열림)

'프로그래밍 언어 > 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
    '프로그래밍 언어/C++' 카테고리의 다른 글
    • C++ 변수와 함수에서의 const
    • C++ 난수 생성 std::random + 생성 시간 측정하는 std::chrono 라이브러리
    • C++ 데이터 타입(data type)
    • C++ std::tuple 여러가지 타입들의 객체를 보관 / Structured binding
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바