如何避免打印重复的号码?[C语言] [重复]

p1tboqfb  于 2023-10-16  发布在  其他
关注(0)|答案(2)|浏览(106)

此问题已在此处有答案

srand() — why call it only once?(7个回答)
上个月关门了。
output

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

int randint(void);

int main(void) {
    for (int i = 0; i < 10; i++) {
        printf("%d ", randint());
    }

    return 0;
}

int randint(void) {
    srand((unsigned)time(NULL));

    return rand() % 81 + 10;
}

我的目的是打印10个不同的数字。但每次连续打印10个重复号码。如何解决此问题?
我使用了像srand()函数这样的库函数。我一点一点地改变了函数的位置,但结果是一样的。

预期值84 40 35 60 45 84 40 77 37 11
产量11 11 11 11 11 11 11 11 11 11 11 11

enxuqcxy

enxuqcxy1#

你必须初始化你的种子只有一次,而不是每次你需要一个随机数,否则,相同的序列的数字产生,你总是选择第一个。
我认为你的代码应该是:

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

int randint(void);

int main(void) {
    srand((unsigned)time(NULL));

    for (int i = 0; i < 10; i++) {
        printf("%d ", randint());
     }

    return 0;
}

int randint(void) {
    return rand() % 81 + 10;
}
3htmauhk

3htmauhk2#

srand()例程的调用应该只发生一次,至少在像您这样的用例中,尽管在许多情况下这是正常的。为了进一步的阅读,你可以参考这个问题:How does calling srand more than once affect the quality of randomness?
通过将它放置在例程中,您每次都要调用它,因此不断地更改您的种子,在这种情况下,它只是重置它,因此为每次调用生成相同的值。
为了摆脱这种不必要的行为,你应该把srand()放在main函数中,或者至少放在rand()调用之前的位置,并在循环或其他会被重复调用的结构(如你的函数)之外。
下面是代码的修改版本:

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

int randint(void);

int main(void) {
    srand((unsigned)time(NULL));

    for (int i = 0; i < 10; i++) {
        printf("%d ", randint());
    }

    return 0;
}

int randint(void) {
    return rand() % 81 + 10;
}

相关问题