2012-05-12 4 views
2

Можно создать дубликат:
generating random enumsКак вернуть случайный элемент из перечисления в C++

Я ищу лучший способ, чтобы выбрать элемент из перечисления в C++. В начале я благодарен за использование переключателя, но у меня есть несколько больших перечислений и неэффективен, поэтому я пытаюсь использовать для каждого, чтобы сделать это.

Чтобы выбрать фруктовый элемент в перечислении:

 
enum FruitType 
{ 
    kApple, 
    kOrange, 
    kMelon 
}; 

И попробуйте эту функцию:

 
/** 
* R3turn a random fruit 
*/ 
FruitType giveMekRandomFruit() 
{ 
    randNumber = rand % __TOTALFRUITS // Enum total = 3 elements 

    for (int& i: FruitType) 
    { 
      if (randNumber = i) 
      { 
      CCLog("Random Fruit selected:" + i); 
      return i; // return the number selected 

      } 
    } 
} 

Очевидно, не работает, у меня есть проблемы с syntaxis или концепцией, любые идея ???

Спасибо за ваше время.

ответ

5

Если значения перечисления смежны, просто возьмите случайное целое в правильном диапазоне и переведите в перечисление. В противном случае создайте массив значений перечисления и индекс со случайным целым числом.

+0

contingent = смежный? –

+0

Так просто, это отлично работает с моим кодом. Большое спасибо, мне нужно больше кофе сегодня утром – vgonisanz

+1

@alex: спасибо, исправлено – stefaanv