c - 我怎样才能把不同的数字放在 C 上的 2 个数组中

标签 c function random

<分区>

我试图在每个数组中放入不同的随机数元素。 然而,这 2 个数组得到了完全相同的 10 个随机数。 我怎么了?我该如何解决?

#define MAX 100
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


void number(int* array)
{
    srand((long)time(NULL));
    for (int i = 0; i < 20; i++)
        array[i] = rand() % MAX + 1;

}

void printing(int* p_array)
{
    for (int i = 0; i < 20; i++)
        printf(" %d", p_array[i]);
    puts("");
}

int main(void)
{
    int score1[20];
    int score2[20];
    number(score1);
    printing(score1);
    number(score2);
    printing(score2);

    return 0;
}

最佳答案

srand((long)time(NULL));

执行此操作时,您将根据调用该行的时间使用种子初始化 srandsrand等伪数生成器的要点就是,只要种子相同,生成器将始终返回完全相同的一系列值,因此使用具有特定种子的生成器的程序可以多次重现完全相同的结果。

问题是你初始化了 srand 两次,并且该行在同一时间运行两次(至少在这么短的程序上是在同一秒),所以种子是一样的。因此,您的两个数组完全相同。

仅在 main 函数的开头调用此行一次,您将仅使用一组数字而不是两个相同的数字,从而导致您的两个数组具有不同的值。

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

    int score1[20];
    int score2[20];
    number(score1);
    printing(score1);
    number(score2);
    printing(score2);

    return 0;
}

关于c - 我怎样才能把不同的数字放在 C 上的 2 个数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44112466/

相关文章:

c - isdigit() 和 isalpha() 返回类型 0?或者这里发生了什么。?

r - 探测要在函数内部调用的全局变量

java - 用随机数填充数组android/java

c - 如何通过 FFMpeg C API 将音频合并到视频

python - 这个cython代码可以优化吗?

c - 低级图形界面是如何编程的?

JavaScript - 原型(prototype)函数与 ViewModel 函数?

c - 在 c 中包含预处理器的实现

bash - 在 Bash 中随机均匀分布

random - 为什么这个 rand use 语句在 rust 中起作用?