Начальное значение для случайной функции C++
Мне нужно заполнить случайную функцию начальным числом 2222. Функция shuffleDeck() вызывает random_shuffle из библиотеки std.
Примечание: проблема в том, что каждый раз, когда я запускаю программу с no_deals=5 и cards_per_hand=5, я получаю один и тот же шаблон:
Пиковый валет, Король алмазов, 10 червей, 4 трефы, Король пиков, 8 алмазов, 3 алмаза, 3 алмаза, 7 червей, 5 треф, 3 червы, 10 червей, 6 Бубны, Король Пиков, Бубновый валет, 7 Червей, 3 бриллианта, Бубновый Король, Бубновый валет 3,
Разве не должно быть изменений? Правильно ли я ввел начальное число 2222?
srand(2222);
for (int i=0; i<no_deals; i++)
{
// test.shuffleDeck();
for(int j=0; j<cards_per_hand; j++)
{
//test.dealCard();
check.at(j)=test.dealCard();
cout<<check.at(j)<<", ";
test.shuffleDeck();
}
cout<<endl;
}
1 ответ
Вот так работает псевдослучайный генератор. Каждый раз, когда вы вводите одинаковое начальное число, оно выводит одинаковые числа в одинаковой последовательности.
Чтобы это исправить, используйте time(NULL)
вместо:
srand(time(NULL));
И только звонок srand
один раз в вашей программе.
Если у вас есть доступ к C++11, вы действительно должны использовать новый <random>
Функциональность заголовка, хотя, пример здесь.