2

我对 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 变量方程,变量 aj 表示方程中每个变量的系数。问题是无论我做什么,它每次都会生成并打印相同的方程,它不会为变量重新分配新的随机值。

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

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

4

1 回答 1

6

移动srand(time(NULL));while循环。

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

并且循环执行得很快,因此每个循环都srand(time(NULL))在同一秒内被评估。

于 2013-10-17T19:38:33.187 回答