2016-11-26 116 views
1

,當我得到這個挺難的事情對我來說做作爲一個初學者獲得枚舉值...我想填補這一結構與信息這會隨機生成如何填充結構/類

struct bunny { 
bool is_vampire; 
std::string name; 
std::string color; 
char gender; 
int age; 
int birth_date; 
}; 

我想用枚舉例如

enum colors{white, brown, black, spotted}; 

當我將初始化一些結構我會做一個功能

void struct_fill(bunny x) 
{ 
x.is_vampire = rand()%2; 
x.color = colors(rand() % 11); 
..... etc. 
} 

但我認爲,如果我使用一個數字,它會返回值,該數字代表 /如果可以說數字2將是黑色/ ...有沒有簡單的解決方案呢?或者用其他方式填充結構數據,並從一些選擇中隨機選擇數據? *我爲我的英語道歉

+0

您是否看到錯誤訊息? –

+0

由於'color'屬於'std :: string'類型,所以你不能用enum做到這一點。你需要像'std :: vector '這樣的東西,並隨機選擇一個索引。 –

+0

哦好吧,我想我誤解了爲什麼枚舉存在,並以他們的方式使用它,謝謝 – Kajm

回答

0

夫婦的方式來做彩色伎倆。最簡單的是可能

std::vector<std::string> colors{"white", "brown", "black", "spotted"}; 

然後

x.color = colors[rand() % colors.size()]; 

由於顏色不太可能在運行時更改的std::string(甚至const char *)陣列可能會更有效。雖然有點棘手以獲得尺寸。

雖然我在這,我可以談談你giving std::uniform_int_distribution a read看看它是否比rand更適合你嗎?

+0

嘿,謝謝!我得到它的工作,我看了uniform_int_distribution,除了你可以使用任何你想要的int間隔之外,rand之間還有其他區別嗎?無論如何,它看起來比蘭德我想更好,再次感謝。 – Kajm

+0

最大的區別就是你在這一點上可能不會太在意的東西:新的隨機數發生器比舊的好得多。 「蘭特」旨在解決20世紀70年代的問題。賠率相當不錯,在2050年'uniform_int_distribution'將被視爲僅適用於野蠻人的工具。 – user4581301

+0

好吧,生病開始使用uniform_int_distribution。謝謝 – Kajm