¿Por qué obtengo el mismo resultado con rand () cada vez que compilo y corro?

Cada vez que ejecuto este código, obtengo el mismo resultado.

Progtwig

#include int main(int agrc, const char *argv[]) { int i = rand(); printf("%d\n",i); for(i=0;i<10;i++) { printf("%d\n",rand()); } } 

Resultado:

 41 18467 6334 26500 19169 15724 11478 29358 26962 24464 5705 

mingw esto en mingw . En realidad estoy aprendiendo Objective-C

Por favor, ayúdame.

Necesita sembrar la función rand con un número único antes de poder usarla. El método más fácil es usar el time()

Por ejemplo

 srand(time(NULL)); rand();//now returns a random number 

La razón es que los números aleatorios proporcionados por rand () (o cualquier otra función basada en algoritmos) no son aleatorios. La función rand simplemente toma su estado numérico actual, aplica una transformación, guarda el resultado de la transformación como el nuevo estado y devuelve el nuevo estado.

Entonces, para que rand devuelva diferentes números pseudoaleatorios, primero debe establecer el estado de rand () como algo único.

Desea inicializar el PRNG.

Inicialízalo una vez (típicamente dentro de main() ) con una llamada a la función srand() .

Si no inicializa el PRNG, lo predeterminado es tenerlo inicializado con el valor 1 . Por supuesto, inicializarlo con algún otro valor constante no le dará diferentes números pseudoaleatorios para diferentes ejecuciones del progtwig.

 srand(1); /* same as default */ srand(42); /* no gain, compared to the line above */ 

Debe inicializar con un valor que cambie con cada ejecución del progtwig. El valor devuelto por la función de time() es el valor más utilizado.

 srand(time(NULL)); /* different pseudo random numbers almost every run */ 

El problema con el time(NULL) es que devuelve el mismo valor en el mismo segundo. Por lo tanto, si llamas a tu progtwig dos veces a las 11:35:17 del mismo día, obtendrás los mismos números pseudoaleatorios.

Solo para agregar a la respuesta de Yacoby, me sorprendió un poco que no fuera una semilla basada en el tiempo, así que busqué en la página del manual :

Si no se proporciona ningún valor de inicialización, la función rand () se inicializa automáticamente con un valor de 1.

Entonces, si cambias tu código para usar seed(1) aún deberías ver el mismo resultado, pero seed(time()) lo hará cambiar cada vez.

El resultado de rand es pseudo- aleatorio, lo que significa que se ve efectivamente al azar, pero se calcula de la misma manera cada vez, a partir de un valor especial llamado semilla. Con el mismo valor inicial, obtienes la misma secuencia de números aleatorios.

Para establecer una semilla diferente, use la función C estándar void srand (unsigned int) una vez en su código antes de comenzar a generar números aleatorios. Una forma común de obtener una secuencia diferente de números aleatorios cada vez que ejecuta el progtwig es basar la semilla en la hora del reloj. Ej. Srand (reloj ())