История: Используя функцию rand()
в C ++, я могу получить случайные числа, а используя %
, я могу установить диапазон. Однако, если я также хочу добавить смещение, то я также должен добавить смещение к результату. Это слишком много работы, поэтому я решил написать свою собственную функцию для этого. Однако я застрял в одной точке.
Я знаю, что мне нужно вводить новую последовательность (srand(time(NULL))
) при каждом запуске программы, в противном случае я буду получать одни и те же числа все время.
Очевидный способ сделать это - вставить srand(time(NULL))
в функцию main()
. Однако я не хочу этого делать, я хочу, чтобы каким-то образом это делалось автоматически, когда я включаю мой .h
файл.
Предположим, myFunctions.h
:
#include <iostream>
#include <string>
#include <vector>
#include <cstdio>
#include <ctime>
int randint(int start, int end);
и myFunctions.cpp
:
#include "myFunctions.h"
/* [start,end) */
int randint(int start, int end)
{
return (rand() % (end - start)) + start;
}
Теперь я запутался, когда мне нужно добавить srand()
. Если я сделаю это в определении randint()
, я предполагаю, что из-за того, что разница во времени будет слишком мала, time(NULL)
будет оценивать одно и то же значение для каждого шага l oop и будет подавать все семена время, когда я хочу получить случайные числа за очень короткое время, например:
for(int i = 0; i < 50; i++){
std::cout << randint(0, 3) << std::endl;
}
На выходе получается то же число, 50 раз. Так что это подтверждает мое подозрение.
Я пробовал что-то подобное в моем определении randint()
,
int randint(int start, int end)
{
#ifndef SEED
srand(time(NULL));
#define SEED
#endif
return (rand() % (end - start)) + start;
}
Однако, это тоже не сработало, потому что, я полагаю, #ifndef
выполняется только один раз на этапе предварительной обработки.
Итак, после этих попыток я попытался вызвать srand()
прямо в начале моего .h
файла, но я столкнулся с тем фактом, что на самом деле вы не можете вызывать функции вне какой-либо функции (например, main()
)
Короче, я застрял прямо сейчас, любая помощь будет оценена.