如何在c ++中从指定的枚举中获取随机值?

时间:2018-05-24 07:24:48

标签: c++ random enums

我想要这个枚举的随机颜色:

enum Color {
red = 10,
black = 3,
pink = 6,
rainbow=99    
};

Color my_randowm_color = ...

我该怎么做?

4 个答案:

答案 0 :(得分:5)

无法枚举枚举值。

您可以使用表格:

std::vector<int> colors = {red, black, pink, rainbow};

然后从中挑选一个随机元素。

选择随机元素作为练习。

答案 1 :(得分:0)

注意:根据我对OP所需要的理解,这是一种不同的方法。

您可以做的是生成0-3范围内的随机数。因为你有四种颜色。然后将颜色存储在数组中。并使用一个函数返回一个随机数作为该数组的索引。通过这种方式,您将获得随机颜色。

例如

random() {
// func definition
//  return random number in range of array indices
}

array = ["red","black","pink","rainbow"];

array[random()];

答案 2 :(得分:0)

您可以创建一个包含可能枚举的数组,然后为数组索引生成随机数,从0开始到总可能的枚举值。

    #include <iostream>

    int main() 
    {
       enum Color {   red = 10, black = 3, pink = 6, rainbow=99 };
       int max = 3;
       int min = 0;

       srand(static_cast <unsigned int> (time(0)));
       int randNum = rand() % (max - min + 1) + min;

       Color forRandomPurpose[] = { red, black, pink, rainbow };
       Color my_random_color = forRandomPurpose[randNum];

       std::cout << "Hello World!\n";
       std::cout << my_random_color << std::endl;
    }

答案 3 :(得分:0)

只是为了好玩( - :

Color random_color() {
   int r = rand() % 4;
   return static_cast<Color>((r + 1) * 3 + (r >= 2) + (r >= 3) * 86);
}

现场演示:https://wandbox.org/permlink/j4YNMqWs41QJFeOB