random()在C中不起作用

use*_*105 6 c random

我目前正在学习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)

Nat*_*pel 9

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()](http://www.unix.com/man-page/POSIX/3posix/random/)确实存在,但也许他的编译器/ libc没有它. (8认同)

use*_*353 6

random并且srandom是非标准的C函数.它们包含在glibc的许多平台上(linux,BSD等).但是,由于它们不是C标准的一部分,因此并非所有编译器都可以使用它们.

然而,所有标准的C语言编译器配有randsrand,所以只要改变你的程序中调用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初学者的书实际使用randomsrandom,那么它可能应该抛出.任何关于使用randomsrandom不告诉你它们都是非标准的C的书应该被抛弃.

  • 实际上,我建议逃避任何以"为傻瓜"结尾的书 (3认同)