如何在C上将2个数组中的不同数字放在一起

时间:2017-05-22 12:06:28

标签: 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;
}

3 个答案:

答案 0 :(得分:2)

srand((long)time(NULL));

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

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

在主函数的开头只调用一次该行,并且您将只使用一个数字而不是两个相同的数字,导致您的两个数组具有不同的值。

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

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

    return 0;
}

答案 1 :(得分:0)

正如4386427所说,问题是你打电话给srand(null)。它重置随机数生成器。如果它没有生成相同的数字序列,那么您的数字生成器就会被破坏。删除或调用它,说当前时间将解决问题。

答案 2 :(得分:0)

number函数

中删除此语句
srand( (unsigned int)time(NULL));

并在调用main之前将其放在number

否则表达式time(NULL)可以产生相同的值。