2013-05-15 18 views
7

Chương trình của tôi chứa mã phải tạo số nguyên dương ngẫu nhiên mỗi khi tôi thực thi nó. Nó tạo ra các số ngẫu nhiên nhưng chỉ một lần. Sau đó, khi tôi thực thi cùng một mã, nó mang lại cho tôi các giá trị giống nhau, và nó làm cho mã của tôi vô dụng.Làm thế nào để sử dụng hàm srand() với time.h?

tôi bắt đầu với rand chức năng, và sau đó tôi đã sử dụng srand() chức năng với các tập tin tiêu đề time.h, nhưng nó vẫn không hoạt động đúng.

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

cuộc gọi đầu tiên (ngẫu nhiên):

6 0 2 0 6 7 5 5 8 6 

cuộc gọi thứ hai (ngẫu nhiên nhưng giống như trước):

6 0 2 0 6 7 5 5 8 6 

Sau đó tôi đến thăm hỏi Stack Overflow và tôi đọc về hàm srand() và tôi đã sử dụng nó như sau:

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

Đầu tiên gọi:

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

Second gọi:

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

Nó được đem lại cho tôi (các giá trị ngẫu nhiên nhưng không phải) khác nhau. Tôi đã xác định Arr [i] dưới dạng unsigned int và vẫn nhận được giá trị âm.

+1

bạn đã đặt hạt giống chưa? Đặt hạt giống của bạn với hàm thời gian. – Magn3s1um

+4

Bạn chỉ cần gọi 'srand' một lần để tạo hạt giống cho trình tạo' rand'. Đừng gọi 'srand' mỗi lần để lấy số của bạn – TJD

+3

Bạn có lẽ nên đọc [manpage] (http://linux.die.net/man/3/rand), giải thích cách các hàm này hoạt động và cung cấp một ví dụ làm việc. – Aya

Trả lời

31

Bạn cần phải gọi srand()lần, để ngẫu nhiên hạt giống, và sau đó gọi rand() trong vòng lặp của bạn:

#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() mất một int không dấu như là một đầu vào, do đó, thời gian (NULL) nên được recast. – Jiminion

3

Cố gắng gọi ngẫu nhiên() trước khi rand() để khởi tạo ngẫu nhiên.

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

+0

Xin vui lòng viết cho tôi mã, nó sẽ thực sự hữu ích nếu bạn đặt nó –

+0

'randomize' không phải là một chức năng tiêu chuẩn - có lẽ bạn có nghĩa là' srand'? –

+0

Paul R, vâng, ý tôi là srand() từ "stdlib.h". Cảm ơn bạn đã thêm nhận xét. Lỗi của tôi. –

1

Nếu bạn chọn srand, nó là một ý tưởng tốt để sau đó gọi rand() ít nhất một lần trước khi sử dụng nó, bởi vì nó là một loại máy phát điện psuedo-ngẫu nhiên nguyên thủy khủng khiếp. Xem Câu hỏi về ngăn xếp ngăn xếp Why does rand() % 7 always return 0?.

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

Nếu có, random hoặc arc4rand sẽ tốt hơn.

-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

phương pháp mã hóa và giải mã progamming được sử dụng này –