如何从随机数输出文本

时间:2015-04-11 17:43:51

标签: c++ visual-c++

我对c ++非常陌生,我想知道如何从随机数生成器输出文本。 我正在创建一个文本游戏。你偶尔会打架,我希望你赢或输是随机的。例如,如果随机数是2(它将只有一个或两个选择),那么它会说:“你输了!”。请保持答案简单,因为我很新,并解释你的解决方案是完美的。

提前致谢。

5 个答案:

答案 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这么多的用法,让我们做得更有力:

  1. 我们将以std::random_device为您{{}}}如何运作。 (你可以在这里使用<random>,这并不重要。)
  2. 我们的实际PRNG(产生数字的东西)将是[time(0)](http://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine],它被接受为更好的随机数生成器之一。
  3. 我们不会简单地检查一下,而是告诉C ++我们想要一个范围为[0,1]的数字。
  4. 我们会将此组合成一个您只需要调用的对象。
  5. 一个简单的比较将让我们决定玩家是赢还是输。
  6. 所以,从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"; } - 除了它避免与这些功能相关的一大堆问题。