代码之家  ›  专栏  ›  技术社区  ›  Fractale

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

  •  2
  • Fractale  · 技术社区  · 7 年前

    我希望此枚举中的随机颜色:

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

    我该怎么做?

    4 回复  |  直到 7 年前
        1
  •  5
  •   molbdnilo    7 年前

    无法枚举枚举的值。

    您可以使用表格:

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

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

    选择一个剩余的随机元素作为练习。

        2
  •  0
  •   soda    7 年前

    注意:这是一种基于我对OP期望的理解的不同方法。

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

    如.

    random() {
    // func definition
    //  return random number in range of array indices
    }
    
    array = ["red","black","pink","rainbow"];
    
    array[random()];
    
        3
  •  0
  •   PapaDiHatti    7 年前

    可以创建包含可能枚举的数组,然后为数组索引生成从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;
        }
    
        4
  •  0
  •   Daniel Langr    7 年前

    只是为了好玩(—:

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

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

    推荐文章