首先,这可能是完全垃圾,因为我是C ++类的新手,之前从未使用过随机数生成器。但这是我的尝试。它在我想要的值之间生成一个随机数,很好。但是当通过数组输出它们时,所有随机值都是相同的。
RandomNumberGenerator.h
#pragma once
#include <iostream>
#include <cstdlib>
#include <ctime>
class RandomNumber
{
public:
void randomNumber();
int actualRandomNumber;
};
RandomNumberGenerator.cpp
#include "RandomNumberGenerator.h"
void RandomNumber::randomNumber()
{
srand (time(NULL));
actualRandomNumber = rand() % 66 + 1;
}
Game.h
#include "RandomNumberGenerator.h"
class Game
{
private:
int myNumbers[6];
public:
void createGame();
};
Game.cpp
#include "Game.h"
void Game::createGame()
{
RandomNumber create;
std::cout << "Welcome to your game!" << std::endl;
for (int i = 0; i < 6; i++)
{
create.randomNumber();
myNumbers[i] = create.actualRandomNumber;
}
for (int i = 0; i < 6; i++)
{
std::cout << myNumbers[i] << std::endl;
}
}
主要
#include "Game.h"
#include "RandomNumberGenerator.h"
int main()
{
Game play;
play.createGame();
system("pause");
return 0;
}
提前感谢任何时间。
答案 0 :(得分:3)
每次拨打srand(time(NULL))
时,您都会根据每秒只更改一次的值来设置序列的起点,因此您的号码每秒只会更改一次(与呼叫次数无关)。
因此,只需拨打srand()
一次即可修复您的代码。
请注意,rand()
和actualRandomNumber = rand() % 66 + 1;
对于他们的“随机性”(why)都非常糟糕。
请改用C++ STL,考虑页面底部的示例(您希望统一的int分布)。
编辑:错字并链接到OneC ++ Talk
答案 1 :(得分:2)
伪随机数生成器以特定数字开始,然后根据第一个数字生成序列。
当第一个数字相同时,输出顺序将相同。
要在每次启动程序时生成不同的序列,我们的想法是使用程序的开始时间相对于特定日期(以毫秒为单位)。
因此,代码中的错误是您将srand(time(NULL))
放在函数randomnumber()
中并在循环中调用它。由于CPU速度很快,time(NULL)
(序列中的第一个数字)将以毫秒为单位返回相同的值。因此你的序列相同。
要在srand(time(NULL))
main()