如何在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中的两个数字之间生成随机数? (内核)[重复]的主要内容,如果未能解决你的问题,请参考以下文章