Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的srand(time(NULL))函数每次在c中生成相同的数字?_C_Random_Std_Srand - Fatal编程技术网

为什么我的srand(time(NULL))函数每次在c中生成相同的数字?

为什么我的srand(time(NULL))函数每次在c中生成相同的数字?,c,random,std,srand,C,Random,Std,Srand,所以我创建了一个程序,调用一个函数,返回0或1(0表示尾部,1表示头部),然后用它打印100次翻转的结果 我可以使用srand(time(NULL))为rand()添加不断变化的种子,这似乎很简单。这是我的第一次尝试 #include <stdio.h> #include <stdlib.h> int flip(); int main(void) { int heads = 0; int tails = 0; for (short int

所以我创建了一个程序,调用一个函数,返回0或1(0表示尾部,1表示头部),然后用它打印100次翻转的结果

我可以使用srand(time(NULL))为rand()添加不断变化的种子,这似乎很简单。这是我的第一次尝试

#include <stdio.h>
#include <stdlib.h>
int flip();


int main(void) {

    int heads = 0;
    int tails = 0;

    for (short int count = 1; count <= 100; ++count) {

        int number = flip();

        if (number == 0) {
            printf("%s", "Tails");
            ++tails;
        }
        else if (number == 1) {
            printf_s("%s", "Heads");
            ++heads;
        }

    }//end for
    printf_s("\n%d Tails\n", tails);
    printf_s("%d Heads", heads);
}//end main

int flip(void) {

    srand(time(NULL));
    int number = (int)rand();
    printf("%d", number%2);
    return number%2;
}//end flip
#包括
#包括
int flip();
内部主(空){
int头=0;
int-tails=0;

对于(short int count=1;count原因是,
time(NULL)
每秒只更改一次! 这意味着您将使用同一种子对随机数生成器进行100次种子设定。 更好的方法是在进程开始时(在
main()
的开头)仅为RNG种子设定一次,然后您应该获得不同的值

如果你启动程序的频率超过每秒一次,你也可以用

srand(time(NULL)+getpid());

或类似。检查此项:通常,您只需调用srand一次,然后单独调用rand。srand为PRNG种子。它意味着在应用程序启动时调用一次。或者此项与%一起使用不会给您带来良好的分发效果。您最好使用
返回号码>rand_MAX/2;
(通常,number*desiredMax/RAND_MAX是一种很好的方法-只要您正确处理可能发生的溢出)。