2012-02-23 9 views
8

Duplicar posible:
What's the Right Way to use the rand() Function in C++?rand() que generan al mismo número de compilación

he estado aprendiendo cómo utilizar la función rand() y me escribió un pequeño juego de adivinanzas en C++ como se ve abajo, pero el problema es que no importa cuántas veces compre los programas, el número generado es el mismo -> 41

#include <iostream> 
#include <cstdlib> 
#include <conio.h> 
using namespace std; 

int main() 
{ 
    int x = rand()%100; 
    int y=0; 
    cout << "Ghiceste numarul!" << endl; 
    cin >> y; 

    while(y != x) { 

     if(y > x) { 
      cout << "Numarul tau este prea mare! Incearca un numar mai mic!" << endl; 
      cin >> y; 
      } 

      if(y < x) { 
       cout << "Numarul tau este prea mic!" << endl; 
       cin >> y; 
       } 

     if (y == x) { 
     cout << "FELICITARI, AI GHICIT NUMARUL!\n"; 
     return 0; 
     } 
    } 
} 

También traté de cambiar el valor máximo de rand() y cambió siempre y cuando lo ponga < 41.

¿Alguna idea? No tengo una pista de por qué esto está sucediendo. Estoy usando CodeBlocks IDE y yo tratamos de reconstruir (CTRL + F11)

+1

+1 para [SSCCE] (http://sscce.org/). –

Respuesta

11

Trate de añadir

srand(time(0)); 

al comienzo de main.

+7

Haga esto, pero tenga en cuenta que solo necesita hacerlo una vez al comienzo de su programa. No lo haga cada vez que llame a 'rand()'. – spencercw

+5

Y tenga en cuenta la advertencia: si ejecuta su programa más de una vez por segundo, volverá a utilizar semillas aleatorias (y le dará los mismos números cada vez que ejecute el programa hasta que pase un segundo). –

+0

Ambos son buenos puntos. Asegúrese de revisar la publicación SO mencionada en el comentario de tenfour a su pregunta. –

2

es probable que use la misma semilla cada vez para el generador de números aleatorios. si set the seed of the random number generator cada vez tiene un valor diferente, obtendrá diferentes números. de acuerdo con los documentos:

Con el fin de generar números aleatorios como, srand generalmente se inicializa a algún valor distintivo, como los relacionados con el tiempo de ejecución. Por ejemplo, el valor devuelto por el tiempo de la función (declarado en el encabezado ) es diferente cada segundo, lo que es lo suficientemente distintivo para la mayoría de las necesidades aleatorias.

0

Debe pasar una semilla a la función rand(), que será diferente cada vez que se ejecute el programa (por ejemplo, marca de tiempo). En términos generales, la generación de números verdaderamente aleatorios no es posible, pero puede obtener un pseudoaleatorio.

5

Usted debe tratar primero para inicializar una semilla para la función rand() de la siguiente manera:

srand (time(NULL)) 

al comienzo de main. Asegúrese de incluir el time.h en la cabecera

#include <time.h> 

o

#include <ctime> 
0

Es necesario sembrar la función rand con srand() al comienzo de main, típicamente usando el tiempo(); función

0

El generador de números aleatorios se está generando con el mismo estado predeterminado en cada ejecución de su programa.

Para obtener resultados diferentes en cada ejecución, debe inicializar el generador de números aleatorios en su programa llamando al srand() y pasando una nueva semilla. Es común usar el valor de retorno de time(NULL) como semilla, ya que eso garantizará que obtenga una semilla diferente en las diferentes ejecuciones de su programa.

por lo que añadir lo siguiente al comienzo de main:

srand(time(NULL)); 
Cuestiones relacionadas