2013-05-15 17 views
7

Mój program zawiera kod, który powinien generować losową liczbę całkowitą dodatnią za każdym razem, gdy ją uruchomię. Generuje losowe liczby, ale tylko raz. Potem, kiedy wykonuję ten sam kod, daje on te same wartości i czyni mój kod bezużytecznym.Jak korzystać z funkcji srand() z time.h?

Zacząłem rand funkcji, a następnie użyłem srand() funkcji z pliku nagłówka time.h, ale nadal nie działa prawidłowo.

#define size 10 
for(i=0;i<size;i++) 
    Arr[i] = rand()%size; 

pierwsze wezwanie (losowo):

6 0 2 0 6 7 5 5 8 6 

drugie wezwanie (losową ale taki sam jak poprzedni):

6 0 2 0 6 7 5 5 8 6 

Później odwiedził pytania przepełnienie stosu i czytałem o funkcja srand(), a ja użyłem jej jako:

#include<time.h> 
for(i=0;i<size;i++) 
    Arr[i] = srand(time(NULL)); 

pierwsze wezwanie:

-10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 -10327 

drugie wezwanie:

-10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 -10326 

To daje mi różne (ale nie wartości losowe). Zdefiniowałem Arr [i] jako unsigned int i nadal otrzymuję wartości ujemne.

+1

tak ustawić swoje nasienie? Ustaw swój materiał siewny za pomocą funkcji czasu. – Magn3s1um

+4

Wystarczy raz wywołać 'srand', aby zasiać generator' rand'. Nie dzwoń 'srand' za każdym razem, aby uzyskać swoje numery – TJD

+3

Prawdopodobnie powinieneś przeczytać stronę [mansage] (http://linux.die.net/man/3/rand), która wyjaśnia działanie tych funkcji i zapewnia przykład pracy. – Aya

Odpowiedz

31

Trzeba zadzwonić srand()raz, aby losowo ziarno, a następnie zadzwonić rand() w pętli:

#include <stdlib.h> 
#include <time.h> 

#define size 10 

srand(time(NULL)); // randomize seed 

for(i=0;i<size;i++) 
    Arr[i] = rand()%size; 
+0

srand() ma unsigned int jako dane wejściowe, więc czas (NULL) powinien zostać przekształcony. – Jiminion

3

próby wywołania losowo() przed rand(), aby zainicjować generator liczb losowych.

(zobacz: srand() — why call it only once?)

+0

Proszę napisz mi kod, byłoby naprawdę pomocne, jeśli umieścisz go –

+0

'randomize' nie jest standardową funkcją - może masz na myśli' srand'? –

+0

Paul R, tak, mam na myśli srand() ze "stdlib.h". Dziękujemy za dodanie komentarza. Mój błąd. –

1

Jeśli zdecydujesz się srand, że jest to dobry pomysł, aby następnie wywołać rand() przynajmniej raz przed użyciem, ponieważ jest to rodzaj strasznej prymitywnego generatora psuedo-losowy. Zobacz pytanie przepełnienie stosu: Why does rand() % 7 always return 0?.

srand(time(NULL)); 
rand(); 
//Now use rand() 

Jeśli są dostępne, albo random lub arc4rand będzie lepiej.

-1
#include"stdio.h" 
#include"conio.h" 
#include"time.h" 

void main() 
{ 
    time_t t; 
    int i; 
    srand(time(&t)); 

    for(i=1;i<=10;i++) 
    printf("%c\t",rand()%10); 
    getch(); 
} 
-2
#include"stdio.h"//rmv coding for randam number access 

#include"conio.h" 

#include"time.h" 

void main() 
{ 
    time_t t; 
    int rmvivek; 

    srand(time(&t)); 
    rmvivek=1; 

    while(rmvivek<=5) 
    { 
     printf("%c\t",rand()%10); 
     rmvivek++; 
    } 
    getch(); 
} 
+0

ta metoda kodowania i odszyfrowywania progamming używanej części –

Powiązane problemy