c语言编程有个地方不会 怎么用srand和time函数生产随机数

帮忙修改一下这个代码
顺便讲解一下 谢谢

你先要知道,计算机并不能产生真正的随机数。他只是使用你提供的一个初始值,每次对这个值进行一个比较复杂的运算(各种位运算+奇奇怪怪的计算,详情请查阅伪随机算法),意思是计算机的随机数,其实也是可以根据他的随机函数算出来的。。

srand()函数是添加随机数种子,其实就是设置这个初始值,如果不要这个函数的话,rand()函数生成的序列是固定的。为了保证每次随机值都尽量不同,一般取系统当前时间戳作为随机函数种子,这样效果较好,于是就有了你看到的代码srand(time(NULL))

rand()函数是取随机值。有了随机种子之后,每次调用rand函数会生成一个范围在0到MAX_RAND的随机值。MAX_RAND这是个宏,在不同的IDE里面有不同的定义,在我的VS2012里面,他等于0x7fff。
意思是rand()函数每次生成的随机数范围在0到0x7fff之间。
看你的代码应该是要叫人猜计算机生成的随机数,如果这个范围过大,就没什么意思了,我就假设你需要的随机数是0到9之间的吧。那么你生成随机数的代码就应该是:
rand()%10;

我不是很清楚你的代码到底要表达什么,我自己随便写了一份参考代码:

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

int ReadInt()
{
int MyRand;
printf("please guess a number, range(0~9):");
scanf("%d",&MyRand);
return MyRand;
}

int main()
{
int MyRand;
srand(time(NULL));
while(true)
{
int x=rand()%10;
MyRand=ReadInt();
if(MyRand==x)
{
printf("you win!\n");
break;
}
else
{
printf("you guess wrong! you guess:%d but the answer is:%d now\nplease try again\n",MyRand,x);
}
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-10-31
MyRand是一个很大的数字,对MyRand取模就可以了,比如:int m = MyRand%100; 这样就可以得到一个大于0小于100的值,而这个值就可以作为随机数使用了,当然,如果想要更大的随机就修改100为其他值。追问

谢谢哈

相似回答