切换功能在C ++中不起作用

时间:2014-03-09 01:10:08

标签: c++

C ++的超级初学者,如果这段代码非常难看,请原谅我。

string enemy;
int num;
num = rand()%(5);

switch (num)
{
case 1: enemy = "Ogre";
    break;
case 2: enemy = "Goblin";
    break;
case 3: enemy = "Orc";
    break;
case 4: enemy = "Dark Elf";
    break;
case 5: enemy = "Lizardman";
    break;
}

基本上应该发生的是,取决于随机数是什么,选择的情况是该数字将变量“敌人”设置为该情况。但经过一些调试后,我发现唯一出现的情况是第一个。我搜索了一个答案,但他们都说我唯一需要的就是休息(我已经有了)。我的代码出了什么问题?

3 个答案:

答案 0 :(得分:3)

这不起作用,因为rand()值介于0到4之间,因为rand()返回介于0和RAND_MAX之间的值,并且您将其除以5。

要解决此问题,只需更改

即可
num = rand()%(5);

num = rand()%(5) + 1;

此外,您可能希望使用

rand()函数设定种子以获得更好的结果
srand(time(NULL)); // requires #include <ctime>

答案 1 :(得分:2)

您需要先调用 srand

  

srand()播种rand()使用的伪随机数生成器。如果在对srand()的任何调用之前使用rand(),则rand()的行为就像是用srand(1)

播种一样

请参阅link

这就是为什么你总是得到1的结果。

srand(time(0)); //use current time as seed for random generator
num = rand() % 5;

答案 2 :(得分:0)

标准的 rand()函数是一个非常简单快速的伪随机数生成器,对于大多数实现来说通常都是LCG。因此,当您将上限/下限修剪为短距离时,返回重复数字并不罕见。

那就是说,我认为你所寻找的可能是srand()函数,它将改变随机种子,如果你用当前时间播种它可能会给你一个更好的分布。

另一件事,你使用它的方式,你会得到一个范围[0,4]的数字。要获得范围[1,5]中的数字,正确的是rand() % 5 + 1。有关详细信息,请参阅this link