带有兰特的C中的随机数

时间:2017-01-21 20:30:02

标签: c

#include <stdio.h>
#include <stdlib.h>
int main()
{




    int a = rand()%  36;
    int b = rand() % 36;
    int c = rand() % 36;
    int d = rand() % 36;

    printf("1 = %d\n" , a);
    printf("2 = %d\n" , b);
    printf("3 = %d\n" , c);
    printf("4 = %d\n" , d);




    return 0;
}

我正在尝试编写一个可以显示从1到36的随机数的程序。上面的程序只显示1到36之间的随机数。当我第二次运行程序时,随机数保持不变。每次运行程序时,是否有缺少随机nubmer的东西?

5 个答案:

答案 0 :(得分:1)

您需要使用srand()为随机数生成器播种。否则,1被认为是种子。

srand()手册页:

  

如果未提供种子值,则自动执行rand()函数   种子值为1。

这意味着每次运行程序时,都会使用相同的种子(1),这样您就可以获得相同的数字序列。

通常,srand((unsigned int)time(NULL));用于播种。但是如果你足够快地运行你的程序(即如果time(NULL)返回相同的值),那么即使这样,你也可能获得相同的数字序列。

答案 1 :(得分:0)

您想要的是srandtime

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{

    srand(time(NULL));

    int a = rand()%  36;
    int b = rand() % 36;
    int c = rand() % 36;
    int d = rand() % 36;

    printf("1 = %d\n" , a);
    printf("2 = %d\n" , b);
    printf("3 = %d\n" , c);
    printf("4 = %d\n" , d);

    return 0;
}

答案 2 :(得分:0)

main放入

srand(time(NULL));

初始化随机数生成器。

您还需要#include for time

答案 3 :(得分:0)

这是种子问题。随机数生成器在生成随机数时具有模式,因此需要在使用前进行“播种”。对于与安全无关的用途,rand()很好,可以使用time(null)播种。例如:

srand ( time(NULL) );
int a = rand()%  36;
int b = rand() % 36;
int c = rand() % 36;
int d = rand() % 36;

printf("1 = %d\n" , a);
printf("2 = %d\n" , b);
printf("3 = %d\n" , c);
printf("4 = %d\n" , d);

编辑:另外,要获得1到36之间的数字,您应该说:(rand() % 36) + 1;rand()生成介于0到 RAND_MAX 之间,因此如果您只修改36,则可能会返回零,这显然不在1到36的范围内。

答案 4 :(得分:0)

您必须使用rand播种srand。您还有代码将显示0到35之间的随机数,而不是1到36.这是因为%返回操作的其余部分,它将始终在0和除数之间 - 1.因此,您的代码应该是:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{

    srand(time(NULL));

    int a = 1 + rand() % 36;
    int b = 1 + rand() % 36;
    int c = 1 + rand() % 36;
    int d = 1 + rand() % 36;

    printf("1 = %d\n", a);
    printf("2 = %d\n", b);
    printf("3 = %d\n", c);
    printf("4 = %d\n", d);

    return 0;
}