rand () retorna os mesmos valores quando chamado dentro de uma única function

Eu sou um novato C ++ e estou perplexo com isso. Eu preciso chamar esta function na minha function principal três vezes, mas cada vez que me dá o mesmo resultado, ou seja, pull_1, pull_2, pull_3 são os mesmos. O que eu preciso fazer para torná-los realmente randoms?

string PullOne() { string pick; string choices[3] = {"BAR", "7", "cherries"}; std::srand(time(0)); pick = choices[(std::rand() % 3)]; return pick; } 

Da minha function principal:

 string pull_1, pull_2, pull_3; pull_1 = PullOne(); pull_2 = PullOne(); pull_3 = PullOne(); 

Você não deve chamar srand() antes de cada chamada para rand() . Chame uma vez – em algum lugar no início do seu programa.

O problema é você reiniciar o gerador random para que ele comece a produzir a mesma sequência pseudo-aleatória do mesmo ponto.

O gerador de números randoms é redefinido para um estado inicial, que é determinado pelo valor inicial, toda vez que você chama srand . O valor do tempo pode ser o mesmo entre chamadas sucessivas ao time , daí a mesma semente e o mesmo número gerado.

Chame a function de propagação ( srand ) apenas uma vez em sua function principal antes de gerar amostras aleatórias.

Por que você continua chamando std::srand(time(0)); ? Isso re-sementes do PRNG …. e porque tudo isso acontece dentro do mesmo segundo, você está sempre re-semeando com a mesma seqüência.

Ligue para o srand uma vez no seu programa e apenas uma vez.

Além disso, eu recomendaria, pelo menos em sistemas compatíveis com POSIX, algo como std::srand(time(0) ^ getpid()) , para que você possa executar seu programa duas vezes dentro do mesmo “segundo” e ainda obter um novo Sequência PRNG.

A function de time(0) pode não ter ‘marcado’ entre as chamadas de function. Então você está semeando o gerador de números randoms com o mesmo valor a cada vez, levando a valores idênticos para rand()

Seu problema é que você semeia o RNG cada vez que você chama a function. Você só deve semear isso uma vez em um programa para obter melhores resultados. Se você quiser que o resultado varie de uma execução do programa para a próxima, com base no resultado da function time ().