如何在C中随机打印1到10

时间:2010-10-06 20:34:36

标签: c random

  

可能重复:
  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中的字符。

2 个答案:

答案 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,这就是你要求的。