通过rand()函数使用枚举

时间:2020-03-09 01:54:01

标签: c++ random enums

Noob程序员在这里,试图获得有关分配的帮助。如果有人可以帮助我弄清楚我在做错什么,那将是很好的例子。我知道rand是一个整数,默认情况下不能将其设置为等于枚举。我试图让兰特整数配对一个随机选择的枚举。很抱歉重新发布一个已经提出的问题,但是其他用户编写的其他示例也让我感到困惑。

注意:我没有将srand添加到种子随机数中,因为在我的特定作业中,不需要根据我的指导者为它添加种子,不知道为什么,只需遵循指示即可。

#include <iostream>
#include <ctime>
#include <iomanip>

using namespace std;

int main(){ 

  enum SHIRT_COLOR { WHITE, BLACK, RED, GREEN};
  int value = 0; //rand num to be generated
  value = rand() % 4;

  SHIRT_COLOR shirt = WHITE;
  SHIRT_COLOR shirt = BLACK;
  SHIRT_COLOR shirt = RED;
  SHIRT_COLOR shirt = GREEN;
  shirt = static_cast<SHIRT_COLOR>(value);

  cout << "Random Shirt Color: " << shirt;

}    

1 个答案:

答案 0 :(得分:2)

这里有两个问题,但是它们都与rand()没有关系。


多个声明

  SHIRT_COLOR shirt = WHITE;
  SHIRT_COLOR shirt = BLACK;
  SHIRT_COLOR shirt = RED;
  SHIRT_COLOR shirt = GREEN;

在这里创建四个具有相同名称的变量。不清楚为什么要这么做。

只需为您选择的衬衫颜色一个变量即可:

  SHIRT_COLOR shirt = static_cast<SHIRT_COLOR>(value);

输出

C ++不知道如何开箱即用地打印枚举,并且您的程序也不知道这些变量/常量名称。它们仅存在于您的源代码中。

然后,大概,您在此行上收到编译错误:

cout << "Random Shirt Color: " << shirt;

根据涉及的规模,您需要自己用std::mapswitch进行排序,或者甚至只是一系列if / else if


除此之外,您的方法还可以。

static_cast很有意义。

关于srand(),如果您必须忽略它以通过作业,这是很公平的,但是您的讲师错误声称它不应该在其中。

此外,in production code in the future you shall be using the C++11 random features,而不是古老的rand()。在学校,您可能永远不会被教导,因为学校不会教授具有生产质量的C ++,但这是您现在或当您进入就业市场时应该研究的问题。

相关问题