首页 > 解决方案 > 如何在 C++ 中将状态输入到枚举类型的变量中?

问题描述

#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;
}

见上面的代码。

Day 被定义为枚举类型的变量。

“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;
}

它行不通。

谁能告诉我为什么?

如何在 C++ 中将状态输入到枚举类型的变量中?

标签: c++enumsstd

解决方案


您不能将 cin 直接用于枚举类型,但您可以将其用于 int 并将其静态转换为您的枚举类型,如下所示:

#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;
}

推荐阅读