【问题标题】:Random Function Returns The Same Number When Called Inside A Loop! C++ [duplicate]随机函数在循环内调用时返回相同的数字! C++ [重复]
【发布时间】:2017-06-12 09:43:54
【问题描述】:

我想在我的ff 类中创建一个单独的函数来生成一个随机数并返回该数字。当在循环外使用时,该函数似乎工作得很好。但是,当我将函数放入循环中时,即使我每次都调用随机函数,它也会不断生成相同的数字!我到底做错了什么?!

  //return a random number
  int ff::random_number() const
  {
      srand((unsigned)time(NULL));
      return (rand() % 20 + 1); //in the range of 1 to 20
  }


  //creates an int list of random size and random elements
  int ff::create_random_list()
  {
      list_length = random_number(); //the list size
      list_of_numbers = new int[list_length]; //initilize the list

      for (int i = 0; i < list_length; ++i)
          list_of_numbers[i] = random_number(); //insert a random number

      return 1;
  }
  • 注意:我检查了在此问题之前发布的所有类似问题,但没有人回答我的问题。只是说清楚。

【问题讨论】:

  • @Sneftel 这很有用,但称其为完全相同的副本并不公平!
  • 我假设 (unisgned)time(NULL) 在循环内返回相同的值,因此您在每次循环迭代时将伪随机数生成器设置为相同的状态,它会为您提供相同的伪随机数每次(如预期)

标签: c++ random


【解决方案1】:

您必须为函数播种一次,而不是每次都播种(当您在循环中使用函数时会发生这种情况)。

所以这一行:

srand((unsigned)time(NULL));

应该执行一次。

【讨论】:

    猜你喜欢
    • 2013-01-31
    • 2014-08-09
    • 2011-06-18
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多