我对c ++非常陌生,我想知道如何从随机数生成器输出文本。 我正在创建一个文本游戏。你偶尔会打架,我希望你赢或输是随机的。例如,如果随机数是2(它将只有一个或两个选择),那么它会说:“你输了!”。请保持答案简单,因为我很新,并解释你的解决方案是完美的。
提前致谢。
答案 0 :(得分:1)
#include <cstdlib>
#include <iostream>
#include <ctime>
int main()
{
std::srand(std::time(0)); // use current time as seed for random generator
int random_variable = std::rand();
std::cout << "Random value on [0 " << RAND_MAX << "]: "
<< random_variable << '\n';
}
来源:http://en.cppreference.com/w/cpp/numeric/random/rand
然后,您可以将它与常量变量进行比较并执行任何操作,例如:
if (random_variable > 2)
doSomething();
else
doSomethingElse();
答案 1 :(得分:0)
如果只有两个选项,最快的方法是仅对最低有效位的值感兴趣。
if(randomNumber & 1) // equals 1 if the LSB is set.
cout << "You won!" << endl;
else
cout << "You lost!" << endl;
答案 2 :(得分:0)
#include<iostream>
using namespace std;
int main()
{int ran_num=0;
srand((unsigned)time(0));
while(ran_num !=2) //You can add options here.
{ran_num=rand() % 100;//You can change the max number.
cout<<ran_num<<" "<<endl;
}
cout<<"You lost!";}
答案 3 :(得分:0)
由于你的随机出局只有两种状态,你可以把它想象成掷硬币,所以你可以采用随机函数并执行2的模块化除法,就像这个例子一样(只需寻找'掷硬币'而你将获得大量样本):
http://www.c-program-example.com/2012/05/c-program-to-toss-coin-using-random.html
int toss = rand()%2;
你可以使用折腾来管理你的选择。
答案 4 :(得分:0)
由于这里提出了rand
这么多的用法,让我们做得更有力:
std::random_device
为您{{}}}如何运作。 (你可以在这里使用<random>
,这并不重要。)time(0)
](http://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine],它被接受为更好的随机数生成器之一。所以,从1号开始:
std::mt19937_64
现在,虽然#include <random>
#include <functional>
#include <iostream>
int main() {
using namespace std; // because I am lazy today
random_device seeder; // call this to get a number
// more to do here
}
给出了一个随机数,但通常希望您只使用它来为自己的PRNG播种(除非你加密,在这种情况下它会变得更加复杂)。所以,让我们这样做:
seeder()
嗯,这很容易。现在,让我们进行分发:
mt19937_64 prng(seeder());
现在,要获得uniform_int_distribution<int> distribution(0, 1);
或int
的{{1}},我们可以将prng折腾到分发中,如:
0
但是,这很麻烦。因此,我们只是将所有内容组合在一起,而不是之前的步骤:
1
你可以把它读作“让我成为一个名为int one_or_zero = distribution(prng);
的函数式变量,它保持一个均匀分布(每个值与其他任何值一样)的范围[0,1]由一个Mersenne Twister 64 PRNG。
我们现在需要做的就是:
auto dist = bind(uniform_int_distribution<int>(0, 1), mt19937_64(seeder()));
好的,我们只需要在dist
的电话周围打一点int one_or_zero = dist();
- 听起来很简单:
if
您可以在行动here中看到结果,但请注意结果已缓存,因此您需要对其进行分叉并自行运行以查看其更改。
PS:请注意,它会产生恰好两行语义类似于(稍微交换它并获得完全相同的语义)dist
/ if(dist() == 0) {
cout << "You won!\n";
} else {
cout << "Sorry, you lost.\n";
}
- 除了它避免与这些功能相关的一大堆问题。