2010-11-12 8 views
0

J'essaie d'écrire un programme qui génère un nombre pseudo-aléatoire en utilisant une graine. Cependant, je rencontre des problèmes.Problèmes avec srand(), C++

Je reçois cette erreur

39 C:\Dev-Cpp\srand_prg.cpp void value not ignored as it ought to be 

En utilisant ce code

#include <iostream> 
#include <iomanip> 
#include <sstream> 
#include <limits> 
#include <stdio.h> 

using namespace std ; 

int main(){ 
    int rand_int; 
    string close ; 

    close == "y" ; 

    cout << endl << endl ; 
    cout << "\t ___________________________________" << endl ; 
    cout << "\t|         |" << endl ; 
    cout << "\t| Pseudorandom Number Game!  |" << endl ; 
    cout << "\t|___________________________________|" << endl ; 
    cout << endl << endl ; 

    while (close != "y"){ 

     rand_int = srand(9); 
     cout << rand_int << endl ; 

     cout << " Do you wish to exit the program? [y/n]  " ; 
     cin >> close ; } 

} 
+3

Beaucoup de bonnes réponses ci-dessous. Pour référence future, le message du compilateur "valeur nulle non ignorée comme il se doit" vous dit: "vous utilisez le résultat d'une fonction définie pour ne rien retourner ('void')". Cela signifie généralement que vous devriez vérifier la documentation sur la façon dont la fonction est censée être utilisée, car ce que vous essayez n'est pas correct. –

Répondre

7

srand ne retourne pas un nombre aléatoire, il reseeds juste le générateur de nombres aléatoires. Appelez rand après pour obtenir effectivement un certain nombre:

srand(9); 
rand_int = rand(); 
+4

et seulement appeler srand une fois –

3

appel de cette façon.

srand(9); 
rand_int = rand(); 
4

srand() génère une graine (qui est le nombre utilisé pour initialiser le générateur de nombres aléatoires) et doit être appelée une fois par processus. rand() est la fonction que vous recherchez.

Si vous ne savez pas ce que les graines de choisir, utiliser l'heure actuelle:

srand(static_cast<unsigned int>(time(0))); // include <ctime> to use time() 
1

srand retourne la fonction vide et ne retourne pas de valeur.

Here vous pouvez en voir plus à ce sujet. Vous devrez juste appeler srand (9) et obtenir la valeur de rand() après que, comme J-16 SDiZ a souligné, qui sera upvoted pour cela :)

1

Vous utilisez incorrectementfonction particulière est de définir la graine pour les appels ultérieurs à rand.

L'idée de base est d'appeler srand une fois avec une graine indéterminée, puis appelez rand en continu pour obtenir une séquence de nombres. Quelque chose comme:

srand (time (0)); 
for (int i = 0; i < 10; i++) 
    cout << (rand() % 10); 

qui devrait vous donner quelques nombres aléatoires entre 0 et 9 inclusivement.

Généralement, vous ne définissez pas la graine à une valeur spécifique sauf si vous testez ou si vous voulez une séquence identique de nombres pour une autre raison. Vous ne définissez pas la graine à chaque fois avant d'appeler le rand car vous risquez d'obtenir le même nombre plusieurs fois.

Ainsi, votre boucle particulière while serait plus comme:

srand (9); // or use time(0) for different sequence each time. 
while (close != "y") { // for 1 thru 9 inclusive. 
    rand_int = rand() % 9 + 1; 
    cout << rand_int << endl; 

    cout << "Do you wish to exit the program? [y/n]? "; 
    cin >> close; 
}