【问题标题】:How to use enum values in a rand() function如何在 rand() 函数中使用枚举值
【发布时间】:2017-11-18 22:55:49
【问题描述】:

如何使用生成随机枚举变量的 rand 函数?这就是我到目前为止所拥有的(它正在吐出垃圾数字):

enum pieces { FLAG = 'F', BOMB = 'B', MARSHAL = '1', GENERAL = '2', COLONEL = 
              '3', MAJOR = '4', CAPTAIN = '5', LIEUTENANT = '6', SERGEANT = 
              '7', MINER = '8', SPY = 'S' };

int gamePieces[12] = { FLAG, BOMB, MARSHAL, GENERAL, COLONEL, MAJOR, 
                       CAPTAIN, LIEUTENANT, SEGEANT, MINOR, SPY };

int rand_piece = (rand()& gamePieces[12];

【问题讨论】:

  • 试试gamePieces[rand() % 12]
  • 您的代码充满了错误。错误拼写 SEGEANT,MINOR,rand_piece 中缺少右括号,枚举数为 11,而大小声明为 12。

标签: c++ random enums


【解决方案1】:

严格来说可能是不可能的。 你可以

  1. 检查这些枚举的整数值是什么
  2. 那么你就可以生成一个整数了
  3. 对其进行取模 (%)
  4. 解析为枚举[编辑 - 您不必在 C++ 中将其解析为枚举]

例如。

#include <iostream>
#include <stdlib.h>  
using namespace std;

int main()
{
   enum gamePieces { FLAG, BOMB, MARSHAL, GENERAL, COLONEL, MAJOR, 
                       CAPTAIN, LIEUTENANT, SEGEANT, MINOR, SPY };

   int maxEnumValue = 12;
   int randPiece = rand() % maxEnumValue;
   cout << randPiece;
}

【讨论】:

    【解决方案2】:

    试试:

    int main()
    {
        enum pieces {
            FLAG = 'F', BOMB = 'B', MARSHAL = '1', GENERAL = '2', COLONEL =
            '3', MAJOR = '4', CAPTAIN = '5', LIEUTENANT = '6', SERGEANT =
            '7', MINER = '8', SPY = 'S'
        };
    
        int gamePieces[11] = { FLAG, BOMB, MARSHAL, GENERAL, COLONEL, MAJOR,
            CAPTAIN, LIEUTENANT, SERGEANT, MAJOR, SPY };
    
    
        std::cout << char(gamePieces[rand() % 11]) << std::endl;
        std::cout << char(gamePieces[rand() % 11]) << std::endl;
        std::cout << char(gamePieces[rand() % 11]) << std::endl;
        std::cout << char(gamePieces[rand() % 11]) << std::endl;
        std::cout << char(gamePieces[rand() % 11]) << std::endl;
    
        return 0;
    }
    

    打印:

    7
    4
    4
    B
    6
    

    【讨论】:

      【解决方案3】:

      你可以使用rand() % 12,这将创建一个0-11范围内的随机数:

      int rand_piece = gamePieces[rand() % 12];
      

      您的代码中有更多错误 - 试试这个:

      #include <stdlib.h>
      
      const int numPieces = 11;
      
      enum pieces { FLAG = 'F', BOMB = 'B', MARSHAL = '1', GENERAL = '2', COLONEL = 
                    '3', MAJOR = '4', CAPTAIN = '5', LIEUTENANT = '6', SERGEANT = 
                    '7', MINER = '8', SPY = 'S' };
      
      int gamePieces[numPieces] = { FLAG, BOMB, MARSHAL, GENERAL, COLONEL, MAJOR, 
                             CAPTAIN, LIEUTENANT, SERGEANT, MINER, SPY };
      
      int rand_piece = gamePieces[rand() % numPieces];
      

      或者如果你不需要额外的价值:

      enum pieces { FLAG, BOMB, MARSHAL, GENERAL, COLONEL, MAJOR, 
                    CAPTAIN, LIEUTENANT, SERGEANT, MINER, SPY,
                    MAX_PIECE };
      
      int rand_piece = rand() % MAX_PIECE;
      

      【讨论】:

      • 这是我得到的错误: ---------------------------------- ----- ex.cpp:88:44: 错误:从 'int*' 到 'int' 的无效转换 [-fpermissive] int rand_piece = gamePieces[rand() % 12];
      • @Gbrandonconner 您的代码中还有一些错误。查看更新的答案。
      猜你喜欢
      • 2020-06-20
      • 2023-03-10
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多