2016-11-26 126 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