Why does my srand(time(NULL)) function generate the same number every time in c?
本问题已经有最佳答案,请猛点这里访问。
所以我创建了一个程序,调用一个函数并返回0或1(0表示尾部,1表示头部),然后用它来打印100次翻转的结果。
想到我可以使用srand(time(null))来为rand()添加不断变化的种子,这似乎已经足够简单了。这是我的第一个裂缝。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #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(" %d Tails ", 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 |
我将运行该程序,并且我的rand()值始终是在for语句的每次迭代(即15367、15745或15943)中重复的五位整数。
我到处乱转,直到我发现把srand(time(空))改成srand(time(空)*time(空)/rand()才成功。
我唯一的想法是,每次迭代之间的时间很短,srand()函数的时间(空)部分的变化不足以提供不同的种子值。
我还尝试了srand(time(null)/rand(),但是,每次运行程序(20次以上)时都会产生相同的结果(52个heads 48个tails);但是rand()的值都是不同的。
我不知道为什么会发生这些事情,也不知道为什么最终的srand(time(空)*time(空)/rand()函数会起作用,如果有人能解释的话,我会很高兴的!
原因是,
如果你一秒钟启动程序的次数超过一次,你也可以用
或者类似的。