关于c语言中的rand()

为什么我用这随机产生的数字n=rand()%10;
n总是1?运行多次n总是1,求解

因为随机数种子不变
用srand设置一个不同的随机数种子即可
例程
/* rand example: guess the number */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main ()
{
int iSecret, iGuess;

/* initialize random seed: */
srand ( time(NULL) );

/* generate secret number: */
iSecret = rand() % 10 + 1;

do {
printf ("Guess the number (1 to 10): ");
scanf ("%d",&iGuess);
if (iSecret<iGuess) puts ("The secret number is lower");
else if (iSecret>iGuess) puts ("The secret number is higher");
} while (iSecret!=iGuess);

puts ("Congratulations!");
return 0;
}追问

没能完全理解,估计这是利用时间来定义种子而产生随机数对吗?

追答


使用rand前用srand(time());初始化一下就行

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-11
rand()是产生一个随机数,所以整句地意思就是将产生的随机数与
limit
/
(RAND_MAX
+
1)
相乘并将结果强制转换为长整形

+
1
第2个回答  2012-05-20
楼上的说的基本正确,不过你只要理解rand是伪随机数就好了,rand是存在循环节的,时间长了会重复。
srand是设置开始的位置,所以一定记住,程序中只能用一次srand,用多了绝对不随机。

附,一个可能的srand/rand的源代码
static unsigned long next = 1;
int myrand(void) /* RAND_MAX assumed to be 32767. */
{
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}

void mysrand(unsigned seed)
{
next = seed;
}
第3个回答  2019-10-05
(long)rand()*limit/(RAND_MAX+1)+1什么意思,解释下
rand()产生一个伪随机数..
将其强行装换为
long
型的
后面就是
四则运算了
第4个回答  2012-05-20
是不是你的程序后面不注意给n赋值了。你在前面加个srand(unsigned int (time(NULL)));试试看追问

int n;不算是赋值吧!!!!

追答

。。。。。

相似回答