@sddvxd

Почему функция rand() возвращает одно и то же значение?

Добрый день

cout << rand(); //Всегда возвращает 41! В шарпе такого небыла!!1!
  • Вопрос задан
  • 1744 просмотра
Решения вопроса 3
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
небыла

не было.
Даже так?
while(true)
std::cout << rand() << std::endl;

Почитайте про генераторы псевдослучайных чисел, вероятно вы не меняете seed, поэтому генератор при каждом запуске выдаёт то же значение.
В простейшем случае нужно в начале программы делать
srand(time(0));
Это инициализирует псевдослучайную последовательность текущим временем(количество секунд с 1 января 1970)
Ответ написан
Раз уж у вас C++, то от использования rand() вообще лучше отказаться и пользоваться более точной C++-ной либой <random>:

// Важно: создание этого объекта занимает некоторое время,
// его лучше использовать для генерации всех случайный чисел
std::default_random_engine engine(std::random_device()());

// Легковесный объект-диапазон для генерации целых чисел
// В std есть и куча других полезных распределений
std::uniform_int_distribution<int> distribution(min,max);

for (int i = 0; i < N; ++i) {
    int random_number = distrubution(engine);
    std::cout << random_number << std::endl;
}
Ответ написан
Комментировать
RiseOfDeath
@RiseOfDeath
Диванный эксперт.
По-тому что seed все время одинаковый. (и, к стати, это крайне удобно для отладки).

This number is generated by an algorithm that returns a sequence of apparently non-related numbers each time it is called. This algorithm uses a seed to generate the series, which should be initialized to some distinctive value using function srand.


www.cplusplus.com/reference/cstdlib/rand
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы