2013-08-22 129 views
0

我已經寫了簡單的代碼以Crand()函數返回

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
int val = rand(); 
printf("val = %d",val); 
} 

相同的值,我已經寫一個簡單的bash(編譯和執行過去C程序)

gcc test.c 
gcc -o test test.c 
./test 

問題是,當我執行bash時,它始終返回相同的值:val = 1804289383
如何才能使其按預期返回隨機值?

+2

http://xkcd.com/221/ – pm100

+1

如果您使用'bash',更簡單的解決方案是'echo val = $ RANDOM'。 – jxh

+0

「bash」是什麼時候意味着bash腳本?這個用法是否也延伸到「一個sh」,「一個csh」,「一個zsh」......我們還可以談論「短跑」而不會感到困惑嗎? –

回答

9

給定相同的起點,重複調用rand將始終生成可預測的值流。改變這種方式的方式是通過爲發生器接種不同的值。您通過撥打srand來完成此操作。

假設您不需要每秒多次運行您的程序,當前時間將是選擇種子的便宜/簡單的方法。

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
int main() 
{ 
    srand(time(NULL)); 
    int val = rand(); 
    printf("val = %d\n",val); 
} 

我對你的程序做了一個小改動。輸出有時是行緩衝的,所以我在printf字符串的末尾添加了一個換行\n字符。

+0

添加爲什麼海報可以看到他看到的內容可能會有所幫助 –

+2

@ DennisMeng:即如果您不調用srand(),這相當於調用'srand(1)'。 –

+0

@ DennisMeng好點,現在完成 – simonc