有没有一个函数生成一个随机int数在C?或者我必须使用第三方库?
当前回答
C程序生成9到50之间的随机数
#include <time.h>
#include <stdlib.h>
int main()
{
srand(time(NULL));
int lowerLimit = 10, upperLimit = 50;
int r = lowerLimit + rand() % (upperLimit - lowerLimit);
printf("%d", r);
}
通常我们可以生成一个介于lowerLimit和upperLimit-1之间的随机数
例如,lowerLimit包含或说r∈[lowerLimit, upperLimit)
其他回答
如果您需要比stdlib提供的质量更好的伪随机数,请检查Mersenne Twister。它也更快。示例实现有很多,例如这里。
我的极简解决方案应该适用于范围内的随机数[min, max)。在调用函数之前使用srand(time(NULL))。
int range_rand(int min_num, int max_num) {
if (min_num >= max_num) {
fprintf(stderr, "min_num is greater or equal than max_num!\n");
}
return min_num + (rand() % (max_num - min_num));
}
#include <stdio.h>
#include <dos.h>
int random(int range);
int main(void)
{
printf("%d", random(10));
return 0;
}
int random(int range)
{
struct time t;
int r;
gettime(&t);
r = t.ti_sec % range;
return r;
}
看看ISAAC(间接,移动,积累,添加和计数)。它是均匀分布的,平均循环长度为2^8295。
注意:为了安全性,不要使用rand()。如果您需要加密安全的号码,请参阅此答案。
#include <time.h>
#include <stdlib.h>
srand(time(NULL)); // Initialization, should only be called once.
int r = rand(); // Returns a pseudo-random integer between 0 and RAND_MAX.
在Linux上,您可能更喜欢使用random和srandom。
推荐文章
- errno线程安全吗?
- 如何在C程序中获取当前目录?
- random.seed():它做什么?
- 互斥实例/教程?
- Java中生成UUID字符串的有效方法(UUID. randomuuid ().toString()不带破折号)
- 如何添加一个'或'条件在#ifdef
- extern关键字对C函数的影响
- 如果使用if-return-return或if-else-return?
- 如何从字典中获得一个随机值?
- 转换Python程序到C/ c++代码?
- 为什么程序不是经常用汇编编写的?
- 有没有替换Windows (Visual C)的unistd.h ?
- 生成1和10之间的随机数Java
- 使用gcc命令行从.c文件构建.so文件
- C多行宏:do/while(0) vs作用域块