Использование enum с функцией rand () - PullRequest
0 голосов
/ 09 марта 2020

Программист Noob здесь, пытаясь получить помощь по заданию. Я буду использовать подобный пример, если кто-то может помочь мне понять, что я делаю неправильно, это было бы здорово. Я знаю, что rand является целым числом, и по умолчанию его нельзя установить равным enum. Я пытаюсь получить случайное целое число для пары случайно выбранных перечислений. Извините за перепост уже заданного вопроса, но другие примеры, написанные другими пользователями, меня немного смущают.

ПРИМЕЧАНИЕ. быть посеянным в соответствии с моим инструктором, не знаю почему, а просто следую инструкциям.

#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 Ответ

2 голосов
/ 09 марта 2020

Здесь есть две проблемы, но ни одна из них не имеет ничего общего с 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::map, или switch, или даже просто серия if / else if с учетом соответствующей шкалы.


Кроме этого, ваш подход в порядке.

static_cast имеет смысл.

Относительно srand(), достаточно справедливо, если вам придется пропустить его, чтобы передать свое задание, но ваш инструктор неправ , чтобы утверждать, что это не должно быть там.

Кроме того, в производственном коде в будущем вы будете использовать случайные функции C ++ 11 , а не древние rand(). Probably Вы, вероятно, никогда не будете учить этому в школе, потому что школы не преподают С ++ производственного качества, но это то, что вы должны изучать сами или сейчас, или когда выходите на рынок труда.

...