可能重复:
Generate Random numbers uniformly over entire range
In C, how do I get a specific range of numbers from rand()?
我想在C中生成随机数。它在stdlib.h中有rand()和srand()函数但它给了我非常大的数字。但我只想要数字b / w 1到10.那么,是否可能,如果是,那么如何?如果可以随机生成a-z中的字符。
答案 0 :(得分:7)
最简单的方法是使用模运算符将结果减少到您想要的范围。执行rand() % 10
将为您提供0到9之间的数字,如果您为其添加1,即1 + (rand() % 10)
,您将获得1到10(含)的数字。
在别人抱怨之前,这可能会稀释随机分布,但是,它应该可以用于简单的目的。
答案 1 :(得分:1)
Modulo(%)有一些偏见。
稍微倾向于缩放随机数:
int aDigit = (int) (((double)rand() / (RAND_MAX+1)) * 9 + 1);
printf("%d", aDigit);
打破它:
((double)rand() / RAND_MAX)
将生成介于0.0和0.99999之间的双倍
* 10
将其转换为0.0到9.9999的数字。
+ 1;
将其转换为1.0 - 10.999
(int)
将其变成1-10,这就是你要求的。