Sto facendo un esercizio di un libro che dice di scrivere un programma che genera numeri psuedorandom. Ho iniziato con semplicità.Qual è il modo giusto per utilizzare la funzione rand() in C++?
#include "std_lib_facilities.h"
int randint()
{
int random = 0;
random = rand();
return random;
}
int main()
{
char input = 0;
cout << "Press any character and enter to generate a random number." << endl;
while (cin >> input)
cout << randint() << endl;
keep_window_open();
}
Ho notato che ogni volta che si eseguiva il programma, ci sarebbe stata la stessa uscita "casuale". Così ho esaminato i generatori di numeri casuali e ho deciso di provare a seminare includendo questo primo in randint().
srand(5355);
Il che ha generato lo stesso numero più e più volte (Mi sento stupido ora per la sua attuazione.)
Così ho pensato di essere intelligente e implementare il seme come questo.
srand(rand());
Questo fondamentalmente solo fatto lo stesso come il programma ha in primo luogo, ma emesso un diverso insieme di numeri (che ha senso dal primo numero generato da rand() è sempre 41.)
l'unica cosa che mi veniva in mente per rendere questo più casuale è quello di:
- Avere l'input dell'utente un numero e set che come il seme (che sarebbe facile da implementare, ma questa è l'ultima risorsa) OR
- In qualche modo, il seme deve essere impostato sull'orologio del computer o su un altro numero in costante cambiamento.
Sono sopra la mia testa e dovrei fermarmi ora? L'opzione 2 è difficile da implementare? Altre idee?
Grazie in anticipo.
+1, questa è la pratica standard. – SingleNegationElimination
Puoi anche leggere in/dev/random se ti trovi in un ambiente * nix; ma sono d'accordo con Token, questa è una pratica standard per impostare srand con la funzione time. – Suroot
Inoltre, chiama srand() in main nella parte superiore poiché si dovrebbe chiamare solo una volta. Non chiamarlo ogni volta che generi un nuovo numero. – MahlerFive