random()在C中不起作用

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

我目前正在学习C语言,虽然是“C多功能一体的傻瓜桌面参考”,并开始教授如何获取随机数。但是,它给出的示例代码不起作用(编译器出现错误“未定义对“random”的引用”)。下面是我的代码,是从书中抄来的

#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();
这里,time
time()
函数(在标题
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指定。它旨在成为比标准C
rand()
函数的大多数实现更好的随机数生成器
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)在他当年的一本书中假设了这一点。事实上,我建议远离任何以“为傻瓜”结尾的书。好吧,书中并没有说它们是非标准的,但它确实提到兰德是随机的替代品。不过,谢谢你提供的信息!