C++ генератор случайных чисел, вызванный несколько раз

Привет, у меня проблемы с генератором случайных чисел, который выдает мне одинаковую последовательность (хотя последовательность отличается) чисел при каждом запуске. Вот упрощенный фрагмент кода, чтобы продемонстрировать мою проблему.

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int random(){
    srand(time(0));
    return(1+rand() % 6);
}
int main(){
    cout<< random() <<endl;
    cout<< random() <<endl;
} // will return a repeated double digit i.e. 11, 22, 33, 44

2 ответа

rand() - псевдослучайный генератор. Это означает, что он использует математическую функцию для генерации следующего значения из предыдущего.

srand() устанавливает начальное значение 'seed' для последующих вызовов 'rand()'. Если вы посеете одинаковое значение, вы получите ту же самую случайную последовательность. Если вы начнете с текущим временем, последовательность будет отличаться каждую секунду.

Звоните только один раз:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int random(){
    return(1+rand() % 6);
}

int main(){
    srand(time(0));

    cout<< random() <<endl;
    cout<< random() <<endl;
}

srand() семена случайный генератор. rand() алгоритм, который генерирует случайное число на основе начального числа Поэтому вам нужно только позвонить srand() один раз в вашей программе. Продолжайте читать для больше...

А также, последующие вызовы rand() будет автоматически генерировать разные номера. например

while (1){
    printf("%d ",rand()%100);
}

напечатает список номеров, которые все разные, например, 5 34 65 23 56 ...

Прежде чем вы приступите к его реализации, пожалуйста, обратите внимание time(NULL) обновляется раз в секунду. Вместо этого в int main(){ добавлять srand(time(NULL)); один раз в начале.

Удачи!

Другие вопросы по тегам