random()在C中不起作用
我目前正在学习C语言,虽然是“C多功能一体的傻瓜桌面参考”,并开始教授如何获取随机数。但是,它给出的示例代码不起作用(编译器出现错误“未定义对“random”的引用”)。下面是我的代码,是从书中抄来的random()在C中不起作用,c,random,C,Random,我目前正在学习C语言,虽然是“C多功能一体的傻瓜桌面参考”,并开始教授如何获取随机数。但是,它给出的示例代码不起作用(编译器出现错误“未定义对“random”的引用”)。下面是我的代码,是从书中抄来的 #include <stdio.h> #include <stdlib.h> int main() { int hat; hat = random(); printf("%d is a random number.\n",hat); re
#include <stdio.h>
#include <stdlib.h>
int main()
{
int hat;
hat = random();
printf("%d is a random number.\n",hat);
return(0);
}
#包括
#包括
int main()
{
内帽;
hat=random();
printf(“%d”是一个随机数。\n“,hat);
返回(0);
}
创建伪随机数的函数名,由定义为rand()
要实际获得看似随机的伪随机数,需要使用srand()
为函数rand
设定种子,如下所示:
#include <time.h>
#include <stdlib.h>
srand(time(NULL));
int r = rand();
#包括
#包括
srand(时间(空));
int r=rand();
这里,timetime()
函数(在标题time.h
中声明)以time\u t
类型的值获取当前日历时间。通过这样做,它每次都会获得一个不同的值来为rand()
函数种子
编辑:正如vanza在下面的评论中指出的,有一个函数,但在C标准中没有定义。
random
和srandom
是非标准C函数。它们包含在许多平台(linux、BSD等)的glibc中。但是,由于它们不是C标准的一部分,因此并不要求它们在所有编译器上都可用
但是,所有标准C编译器都带有rand
和srand
,因此只需将程序更改为调用rand
,而不是random
。如果本书中的其他示例程序调用了srandom
,请改用srand
将程序更改为
#include <stdio.h>
#include <stdlib.h>
int main()
{
int hat;
hat = rand();
printf("%d is a random number.\n",hat);
return(0);
}
#包括
#包括
int main()
{
内帽;
hat=rand();
printf(“%d”是一个随机数。\n“,hat);
返回(0);
}
您的书中的下一个程序可能会添加对srandom
的调用,以使生成的psuedo随机数成为真正的随机数。如果是,请改用srand
如果一本关于C的初学者书实际上使用了random
和srandom
,那么它可能会被扔掉。任何关于C语言的书,如果使用了random
和srandom
,而没有告诉你它们是非标准的,就应该扔掉。函数及其种子函数srandom()
由POSIX指定。它旨在成为比标准Crand()
函数的大多数实现更好的随机数生成器random()
包含在C库的GNU实现中(通常称为glibc
)。在编码任何依赖随机性的应用程序时使用rand()
Windows系统不提供此特定接口。可以改用
关于random()
和CryptGenRandom()
的更多信息可以在主题中找到。我想你使用了codeblock,我使用了同一本书,尝试使用cygwin而不是默认编译器你在哪里找到函数random()
?你需要rand
,而不是random
。哪个平台?什么编译器?此代码使用gcc版本4.7、4.8和4.9编译just find on mac。您可能需要链接到数学库。使用-lm
@awashburn编译看起来所有函数(非标准或其他)都应该在stdlib.h
中,所以这可能不会有帮助。实际上,确实存在,但可能他的编译器/libc没有它。有趣的是,我不知道有任何系统真正做到这一点,time\u t
允许是一个浮点数,其范围在0和1之间,在这种情况下,srand(time(NULL))
将始终使用0为PRNG种子。我记得克莱夫·费瑟(Clive Feather)曾经批评赫伯·席尔德(Herb Schildt)在他当年的一本书中假设了这一点。事实上,我建议远离任何以“为傻瓜”结尾的书。好吧,书中并没有说它们是非标准的,但它确实提到兰德是随机的替代品。不过,谢谢你提供的信息!