c++ - 如何在 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++ 中将状态输入到枚举类型的变量中?
解决方案
您不能将 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;
}
推荐阅读
- ios - 在 CollectionView Swift 上显示 Gif
- java - void 方法不能返回值 -Java
- reactjs - 是否可以为 Draft.js 创建演示数据?
- java - RecyclerView onBindViewHolder indexOutOfBounds 试图在 ArrayList 中绘制元素
- swift - 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序。无法识别的选择器发送到实例
- azure - 从叶设备发送消息 未由在透明网关上运行的 IoT Edge 处理的下游设备
- python - TensorFlow 渴望没有 keras
- php - 用GD合并2张相同大小的图片
- css - CSS,左/右切换以转换/翻译以获得更好的性能
- powershell - 使用 TOM 处理 SSAS 表格模型时减少并行度