【问题标题】:Random Number Generator - not generating a random number every time随机数生成器 - 不是每次都生成随机数
【发布时间】:2016-11-07 16:37:31
【问题描述】:

我正在尝试使用 rand() 创建一个随机数字/字母,但是每次调用它时它只会返回相同的数字/字母。

void Location::pick() {
    srand(time(NULL));
    x = rand() % fieldSize + 1;
    int locy = rand() % fieldSize + 1; // rand y
    switch (locy) {
    case 1: y = 'a'; break;
    case 2: y = 'b'; break;
    case 3: y = 'c'; break;
    case 4: y = 'd'; break;
    case 5: y = 'e'; break;
    }
}

fieldSize 设置为 5。我在顶部使用 srand()。下面是我调用函数的地方。

void Fleet::deployFleet() {
    bool newLoc = true;
    Location tmp;

    for (int i = 0; i < fleetSize; i++) {
        tmp.pick();
        ships[i].setLocation(tmp);
    }
}

fleetSize 设置为 5。ships[] 是 5 艘船的数组。 setLocation() 只是将船的位置设置为给定的参数。

【问题讨论】:

  • 不要使用rand(),尤其不要使用rand() % n。阅读更多here。请改用srand 和时间作为参数。
  • 重新打开,因为代码有点不同。高度相关:stackoverflow.com/questions/37701567/…
  • 这段代码的一切都被破坏了。多次播种,使用time(NULL)作为种子,使用rand(),使用%限制数字的范围……我什至不知道从哪里开始。

标签: c++ visual-studio


【解决方案1】:

伪随机生成器将为同一种子生成相同的“随机”数字序列。

您以秒为单位重复为生成器播种。你很快就做了 5 次。所以每次迭代的时间总是相同的。因此,您会得到所述序列的第一个数字,并且它始终是相同的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-11
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多