【问题标题】:How can i put different number in 2 array on C [duplicate]我如何在C上的2个数组中放置不同的数字[重复]
【发布时间】:2017-10-22 02:06:24
【问题描述】:

我尝试在每个数组中放置不同的随机数元素。 然而,这 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,例如在main的开头
  • 抱歉我正在编辑它

标签: c function random


【解决方案1】:
srand((long)time(NULL));

当你这样做时,你正在初始化srand,并根据调用该行的时间使用种子。像srand 这样的伪数生成器的要点是,只要种子相同,生成器将始终返回完全相同的一系列值,因此使用具有特定种子的生成器的程序可以重现精确的多次相同的结果。

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

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

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

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

    return 0;
}

【讨论】:

  • 感谢您的精彩解释 :) 现在我可以很好地理解为什么它不起作用了
【解决方案2】:

number 函数中删除此语句

srand( (unsigned int)time(NULL));

在调用number之前将它放在main中。

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

【讨论】:

  • 真的很感谢你..:) 现在可以了!
【解决方案3】:

正如 4386427 所说,问题在于您致电 srand(null)。它重置随机数生成器。如果它没有生成相同的数字系列,那么你的数字生成器就坏了。删除它或调用它说当前时间将解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-07
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多