如何在C中的两个数字之间生成随机数? (内核)[重复]

Posted

技术标签:

【中文标题】如何在C中的两个数字之间生成随机数? (内核)[重复]【英文标题】:How to generate random number between two numbers in C? (Kernel) [duplicate] 【发布时间】:2021-08-02 12:16:30 【问题描述】:

我想在 C(内核)中的两个数字之间生成随机数。在带有标准库的 C 中很容易,但在没有库的 C 中,我刚刚找到了这个链接:link 1,link 2,我不知道如何使用链接中的代码。

我无法显示我的代码。因为我的代码太长(+1000 行代码)。

编辑

这是我不完整的代码:

#include <lib.h>

int rand()

    unsigned long int next = 1;
    next = next * 1103515245 + 12345;
    return (unsigned int)(next / 65536) % (RAND_MAX + 1);


int rrand(int min, int max)

    /* incomplete */

lib.h:

#ifndef _LIB_H
# define _LIB_H
#endif

#ifdef _LIB_H
# ifndef _DEF_H /* this line isn't important for this question */
#  include <def.h> /* this line isn't important for this question */
# endif

# define RAND_MAX 32767
extern int rand();
extern int rrand(int min, int max);
extern void *malloc(size_t size); /* this line isn't important for this question */
extern int atoi(char *str); /* this line isn't important for this question */
extern char *itoa(int value, char *str, int base); /* this line isn't important for this question */
#endif

编辑 2

我可以毫无错误地编译我的代码。

【问题讨论】:

链接中的问题/答案有什么问题? @Jabberwocky 我无法使用问题中的答案生成随机数。我不知道如何生成随机数,例如在 5 到 25 之间使用问题的答案。 @Jabberwocky 我的问题有什么问题需要修改吗? 那么为什么您无法使用链接中提出的代码?你尝试了什么?您无法编译代码吗?它是否运行但你得到的结果不是你期望的结果?阅读此:How to Ask 和此:minimal reproducible example。 如果您将 1000 多行代码用于生成伪随机数的函数和从范围中进行选择的函数,则您做得过火了。 【参考方案1】:

我通常会执行一个函数来生成一个随机数,直到n,但不包括n

unsigned randto(unsigned n) 
    unsigned r, hi = (RAND_MAX / n) * n; // avoid
    do r = rand(); while (r >= hi);      // bias
    return r % n;

使用此功能(当然还有rand()),您可以轻松编写您的rrand()

unsigned rrand(unsigned lo, unsigned hi) 
    return lo + randto(hi - lo + 1);

【讨论】:

assert() 函数在哪里? 断言不需要,已删除...但不要打电话给rrand(100, 10); error: ‘hi’ undeclared (第一次在这个函数中使用) 复制/粘贴错误:-) ideone.com/XMs2st 对不起,我忘记了一行。

以上是关于如何在C中的两个数字之间生成随机数? (内核)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

c语言中如何产生1或0随机数

在两个数字之间生成随机数

在c ++中生成随机双数

如何在0和最大值(C)之间生成随机双精度?

如何使用 Java 生成 1 到 6 之间的 6 个随机数?

C语言随机数字