Как я могу ввести состояние переменной типа enum в C ++? - PullRequest
0 голосов
/ 29 февраля 2020
#include <iostream>
enum Day { Mon = 1, Tue, Wed, Thu, Fri, Sat, Sun };
void printa(Day day);
int main() {
    enum Day day = Sun;
    printa(day);

    return 0;
}
void printa(Day day) {
    if (day > Fri)
        std::cout << "weekend" << std::endl;
    else
        std::cout << "weekdays" << std::endl;
}

См. Код выше.

День определяется как переменная типа enum.

Значение «Sun» присваивается дню, который равен 7.

В результате «выходные» "печатается.

Теперь я хочу вот что: я ввожу значение (от 1 до 7) в день, то есть присваиваю ему состояние.

Вот код:

#include <iostream>
enum Day { Mon = 1, Tue, Wed, Thu, Fri, Sat, Sun };
void printa(Day day);
int main() {
    enum Day day = Sun;
    std::cin >> day; // Here is the added line
    printa(day);

    return 0;
}
void printa(Day day) {
    if (day > Fri)
        std::cout << "weekend" << std::endl;
    else
        std::cout << "weekdays" << std::endl;
}

Это не может работать.

Может кто-нибудь сказать мне, почему?

Как я могу ввести состояние переменной типа enum в C ++?

1 Ответ

2 голосов
/ 29 февраля 2020

Вы не можете использовать cin direct to enum type, но вы можете сделать это с int и stati c приведите его к вашему типу enum, как показано ниже:

#include <iostream>

enum Day : uint16_t { Mon = 1, Tue, Wed, Thu, Fri, Sat, Sun };

void printa(Day day) {
     if (day > Fri)
        std::cout << "weekend" << std::endl;
     else
        std::cout << "weekdays" << std::endl;
}

int main() {
    uint16_t day = Sun;

    std::cin >> day;

    printa(static_cast<Day>(day));

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...