【问题标题】:Assigning a random value to an array将随机值分配给数组
【发布时间】:2016-09-27 12:37:49
【问题描述】:

我正在尝试

  1. 删除包含 10 个“点”的数组中的信息。
  2. 用 (10) 个随机数填充数组

我的代码直到时间

int main()
{
    int numbers[10] = { 0 };
    int randNumber = 0;
    int i = 0;

    for (int i = 0; i <= 10; i++)
    {
        srand(time(NULL));
        randNumber = rand() % 10 + 1;
        printf("Random number saved in the array: %d\n", randNumber);
        i++;
    }

    getchar();
    getchar();
    return 0;
}

【问题讨论】:

  • 将值赋给数组。
  • 好的,但是如果随机函数在 for 循环之外。它不会只创建一个随机数吗? (至少现在当我把它移到外面时)。我将它放在 for 循环中的目的是在每次循环运行时创建一个新的随机数。
  • srand() 不会创建随机数。 rand() 实际上为您提供了 随机 数字。
  • srand(time(NULL)); 表示“选择伪随机数序列#1474983934”(下一秒#1474983935)。之后,rand() 表示“选择所选序列中的下一个数字”。如果你总是重新开始相同的序列并总是选择其中的第一个数字,你总是得到相同的数字。解决方案:将srand()调用移到循环外。
  • 你的数字必须在 1 到 10 的范围内吗?如果是这样,您可能希望首先按顺序分配值 (for ( i = 0; i &lt; 10; i++ ) numbers[i] = i+1;),然后在数组上执行 random shuffle

标签: c arrays srand


【解决方案1】:

首先,您需要将srand(time(NULL)); 移出循环。

否则,因为time()的时间粒度是1秒,在一秒内,如果在循环中多次调用(在一秒内,大概),它会重新初始化具有相同 seed 的 PNRG 以及对 rand() 的所有下一次调用都会为您提供相同的 random 号码。

现在,一旦您有了 随机 数字,您需要将它分配 给每个数组成员,例如循环内的 numbers[i] = randNumber;,但还有更多内容。您的循环目前已关闭。你需要改变

  for (int i = 0; i <= 10; i++)

 for (int i = 0; i < 10; i++)

保持在界限内。

【讨论】:

    【解决方案2】:

    您的数组大小为 10,此循环运行 11 次,导致溢出。这将解决它:

    for (int i = 0; i < 10; i++)
    

    还要从循环体内移除循环迭代器i 的递增。删除该行:

    i++;
    

    【讨论】:

      猜你喜欢
      • 2017-02-14
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 2019-05-17
      • 1970-01-01
      相关资源
      最近更新 更多