【问题标题】:Using enum with rand() function使用带有 rand() 函数的枚举
【发布时间】:2020-06-20 22:43:48
【问题描述】:

这里是新手程序员,试图在作业上获得一些帮助。我将使用类似的示例,如果有人可以帮助我弄清楚我做错了什么,那就太好了。我知道 rand 是一个整数,默认情况下它不能设置为等于枚举。我正在尝试获取 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;

}    

【问题讨论】:

  • 您似乎需要使用rand()?不允许使用&lt;random&gt; 库的高级功能?
  • 哦,我知道你想输出“WHITE”、“BLACK”等?
  • @John 还没有在我的 CS 课上浏览过
  • @John 正确,而不是输出随机数,我希望该随机数与 enum 上设置的颜色之一匹配
  • 您如何期望从一个可能有五个可能的不同值的随机数中仅导出四个可能的不同enum 值?正如 Spock 先生所说:这非常不合逻辑。

标签: c++ random enums


【解决方案1】:

这里有两个问题,但都与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++,但这是你现在或者当你进入就业市场时应该审视自己的事情。 p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2012-09-04
    相关资源
    最近更新 更多