如何生成多个随机数?

时间:2019-04-03 19:41:34

标签: c++

目前,此程序仅生成一个随机数,打印3次。如何获得打印三个不同随机数的信息?

我也很惊讶,即使我使用了time(0),我也不需要ctime标头。

//This program generates three random numbers.

#include <iostream>
#include <cstdlib>
using std::endl;
using std::cout;

int main() {
    unsigned number;

    srand(time(0));
    number = rand() % 10 + 1;

    cout << number << "         ";
    cout << number << "         ";
    cout << number << endl;
    return 0;
}

4 个答案:

答案 0 :(得分:4)

  

目前,此程序仅生成一个随机数,打印3次。如何获得打印三个不同随机数的信息?

您似乎有严重的误解是什么

number = rand() % 10 + 1;

确实如此。

此时您要完成任务

rand() % 10 + 1

number的值进行评估,并 一次 将其存储到上述行中的变量中。

number的进一步访问将不再触发该评估。


如果您想在每次访问特定的“变量” 时进行评估,则可能要使用 lambda函数

#include <cstdlib>
#include <ctime>
#include <iostream>

int main() {

    std::srand(std::time(nullptr));
    auto number = []() {
        return std::rand() % 10 + 1;
    };

    std::cout << number() << "         ";
    std::cout << number() << "         ";
    std::cout << number() << std::endl;
}

这里是live demo


  

同样令我惊讶的是,即使我使用了time(0),我也不需要ctime标头。

在特定的编译器实现中,您很幸运,而且其中一个已经使用的标准标头之一已经包含了ctime调用所需的time(0)标头。

您宁愿编写的安全,便携的方式

#include <ctime>

// ...
    std::time(nullptr)
// ...

答案 1 :(得分:3)

您只需设置一次number,它将一直是您分配给它的随机数,直到您为其分配其他内容,例如来自rand()的另一个随机数

/This program generates three random numbers.

#include <iostream>
#include <cstdlib>
using std::endl;
using std::cout;

int main()

{
  unsigned number;

  srand(time(0));
  number = rand() % 10 + 1;  
  cout << number << "         ";

  number = rand() % 10 + 1;
  cout << number << "         ";

  number = rand() % 10 + 1;
  cout << number << endl;
  return 0;
}

答案 2 :(得分:2)

C ++中的赋值不是每次使用变量时都会应用的公式。因此,当您这样做时:

number = rand() % 10 + 1;

您可以在程序中出现的位置,为number 一次分配一个值。

如果要获取更多随机数,则需要呼叫rand并多次分配给number

number = rand() % 10 + 1;
cout << number << "         ";
number = rand() % 10 + 1;
cout << number << "         ";
number = rand() % 10 + 1;
cout << number << endl;

答案 3 :(得分:0)

解决方案:

#include <iostream>
#include <cstdlib>
using std::endl;
using std::cout;

int main()

{
  unsigned number;

  srand(time(0));
  number = rand() % 10 + 1;
  cout << number << "         ";
  number = rand() % 10 + 1;
  cout << number << "         ";
  number = rand() % 10 + 1;
  cout << number << endl;
  return 0;
}

您的代码段随机返回三次的原因是

//This program generates three random numbers.

#include <iostream>
#include <cstdlib>
using std::endl;
using std::cout;

int main()

{
  unsigned number;

  srand(time(0));
  number = rand() % 10 + 1;

  cout << number << "         ";
  cout << number << "         ";
  cout << number << endl;
  return 0;
}

“随机数”的值仅分配了一次,并且将保持不变直到再次分配。

希望你对我没错;)