C中的随机值保持不变

时间:2013-10-17 19:37:41

标签: c

我对C有些新手,但我遇到过各种不同语言的同样问题。当使用srand(time(NULL))生成随机数时,这些值在第一次出现时很好,但在此之后的任何时间它都保持相同的值。我尝试将所有变量重置为上面的新值,无效。

    while(Ui <= (uInput - 1))
    {

        printf("Input answer %d: ", (Ui + 1));
        scanf("%d", &answers[Ui]);

        Ui++;


        srand(time(NULL));
        a = (rand() % 25 + 1) - (rand() % 25 + 1);
        b = (rand() % 25 + 1) - (rand() % 25 + 1);
        c = (rand() % 25 + 1) - (rand() % 25 + 1);
        d = (rand() % 25 + 1) - (rand() % 25 + 1);
        e = (rand() % 25 + 1) - (rand() % 25 + 1);
        f = (rand() % 25 + 1) - (rand() % 25 + 1);
        g = (rand() % 25 + 1) - (rand() % 25 + 1);
        h = (rand() % 25 + 1) - (rand() % 25 + 1);
        i = (rand() % 25 + 1) - (rand() % 25 + 1);
        j = (rand() % 25 + 1) - (rand() % 25 + 1);

   }

这个想法是打印掉多个10变量方程,变量a-j代表方程中每个变量的系数。问题在于,无论我做什么,它每次都生成并打印相同的等式,它不会将新的随机值重新分配给变量。

作为旁注,我知道我的代码现在看起来并不像它完成任何事情,但这只是我复制,粘贴和修改的片段,因此您可以看到我分配随机值的方法。

我非常感谢任何帮助,反馈或支持。

1 个答案:

答案 0 :(得分:6)

srand(time(NULL));移到while循环之外。

time(NULL)返回time_t结构,该结构正在转换为unsigned int(原型:void srand( unsigned seed );),存储自纪元以来的总秒数:00:00 :世界协调时间(UTC),1970年1月1日,星期四。

循环执行速度很快,因此每个srand(time(NULL))都在同一秒内进行评估。