2013-08-22 92 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