我目前正在学习C"C傻瓜的一体化桌面参考",并开始教授如何获取随机数.但是,它提供的示例代码不起作用(编译器出现错误"未定义引用'随机'").我的代码如下,从书中复制.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int hat;
hat = random();
printf("%d is a random number.\n",hat);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
由ISO C标准定义的创建伪随机数的函数的名称是rand().
要实际获得看起来随机的伪随机数,您需要rand使用srand()以下函数对函数进行种子处理:
#include <time.h>
#include <stdlib.h>
srand(time(NULL));
int r = rand();
Run Code Online (Sandbox Code Playgroud)
这里,时间time()函数(在标题中声明time.h)将当前日历时间作为类型的值time_t.通过这样做,它rand()每次都有一个不同的值来播种函数.
编辑:正如vanza在下面的评论中指出的那样,有一个random()函数,但它没有在C标准中定义.
random并且srandom是非标准的C函数.它们包含在glibc的许多平台上(linux,BSD等).但是,由于它们不是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);
}
Run Code Online (Sandbox Code Playgroud)
你书中的下一个程序可能会添加一个调用srandom来使生成的伪随机数真的是随机的.如果是这样,请srand改用.
如果基于C初学者的书实际使用random和srandom,那么它可能应该抛出.任何关于使用random和srandom不告诉你它们都是非标准的C的书应该被抛弃.