Solución:
No use srand
dentro del bucle, utilícelo solo una vez, por ejemplo, al comienzo de main()
. Y srand()
es exactamente cómo se restablece esto.
Obtienes el mismo número aleatorio cada vez, porque estás estableciendo una semilla dentro del ciclo. Aunque estés usando time()
, solo cambia una vez por segundo, por lo que si su ciclo se completa en un segundo (lo que probablemente sucederá), obtendrá el mismo valor de semilla cada vez y el mismo número aleatorio inicial.
Mueve el srand()
llame fuera del ciclo (y llámelo solo una vez, al inicio de su aplicación) y debería obtener números “aleatorios” aleatorios.
Hacer no usar rand()
; utilizar las nuevas instalaciones de C ++ 11 (p. ej. std::mt19937
, std::uniform_int_distribution
, etc.) en su lugar.
Puedes usar un código como este (vivir aquí en Ideone):
#include <iostream>
#include <random>
using namespace std;
int main()
{
// Random seed
random_device rd;
// Initialize Mersenne Twister pseudo-random number generator
mt19937 gen(rd());
// Generate pseudo-random numbers
// uniformly distributed in range (1, 100)
uniform_int_distribution<> dis(1, 100);
// Generate ten pseudo-random numbers
for (int i = 0; i < 10; i++)
{
int randomX = dis(gen);
cout << "nRandom X = " << randomX;
}
}
PD
Considere ver este video de la conferencia Going Native 2013 para obtener más detalles sobre rand()
-problemas relacionados:
rand () Considerado nocivo