rand () restituisce gli stessi valori quando viene chiamato all’interno di una singola funzione

Sono un principiante C ++ e sono perplesso su questo. Devo chiamare questa funzione nella mia funzione principale tre volte, ma ogni volta mi dà lo stesso risultato, cioè pull_1, pull_2, pull_3 sono gli stessi. Cosa devo fare per renderli effettivamente casuali?

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

Dalla mia funzione principale:

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

Non dovresti chiamare srand() prima di ogni chiamata a rand() . Chiamalo una volta – da qualche parte all’inizio del tuo programma.

Il problema è che si riavvia il generatore casuale in modo che inizi a produrre la stessa sequenza pseudocasuale dallo stesso punto.

Il generatore di numeri casuali viene reimpostato su uno stato iniziale, che è dettato dal valore di inizializzazione, ogni volta che si chiama srand . Il valore temporale può essere lo stesso tra le chiamate successive al time , quindi lo stesso seme e lo stesso numero generato.

Chiama la funzione di seeding ( srand ) una sola volta nella tua funzione principale prima di generare campioni casuali.

Perché continui a chiamare std::srand(time(0)); ? Questo ri-semina il PRNG …. e poiché tutto ciò accade nello stesso secondo, lo ri-semina sempre con la stessa sequenza.

Chiama srand una volta nel tuo programma e una sola volta.

Inoltre, consiglierei, almeno sui sistemi conformi a POSIX, qualcosa come std::srand(time(0) ^ getpid()) , in modo che tu possa eseguire il tuo programma due volte entro lo stesso “secondo” e ottenere comunque un nuovo Sequenza PRNG.

La funzione time(0) potrebbe non aver “spuntato” tra le chiamate di funzione. Quindi semina il generatore di numeri casuali con lo stesso valore ogni volta, portando a valori identici per rand()

Il tuo problema è che semini il RNG ogni volta che chiami la funzione. Dovresti seminare questa volta in un programma per ottenere i migliori risultati. Se si desidera che il risultato vari da un’esecuzione del programma a quella successiva, si basa sul risultato della funzione time ().