打印枚举文本而不是值 C++
Print enum text instead of value C++
在 Form.h 我有:
enum Direction {
NORTH = 0,
SOUTH = 1,
EAST = 2,
WEST = 3,
};
在 Play.cpp 中,我有一个打印运动的方法 "PlayerA moved to NORTH"
void Play::printMove(Direction dir) {
std::cout << this->getName() << " moved to " << dir << std::endl;
}
因为我尝试打印 0、1、2 或 3:
void Play::printMove(Direction dir) {
std::string moveStr;
switch (dir) {
case NORTH: moveStr = "NORTH";
case SOUTH: moveStr = "SOUTH";
case EAST: moveStr = "EAST";
case WEST: moveStr = "WEST";
}
std::cout << this->getName() << " moved to " << moveStr << std::endl;
}
但这也没有用。为什么?我可以尝试什么?
您需要 break
关键字,否则 printMove()
将始终导致 "WEST"。一旦计算机找到匹配的案例,它就会读取 switch
语句后面的代码。 break
关键字告诉计算机停止读取并在 switch
.
结束括号后继续程序
void Play::printMove(Direction dir) {
std::string moveStr;
switch (dir) {
case NORTH:
moveStr = "NORTH";
break;
case SOUTH:
moveStr = "SOUTH";
break;
case EAST:
moveStr = "EAST";
break;
case WEST:
moveStr = "WEST";
break;
}
std::cout << this->getName() << " moved to " << moveStr << std::endl;
}
在 Form.h 我有:
enum Direction {
NORTH = 0,
SOUTH = 1,
EAST = 2,
WEST = 3,
};
在 Play.cpp 中,我有一个打印运动的方法 "PlayerA moved to NORTH"
void Play::printMove(Direction dir) {
std::cout << this->getName() << " moved to " << dir << std::endl;
}
因为我尝试打印 0、1、2 或 3:
void Play::printMove(Direction dir) {
std::string moveStr;
switch (dir) {
case NORTH: moveStr = "NORTH";
case SOUTH: moveStr = "SOUTH";
case EAST: moveStr = "EAST";
case WEST: moveStr = "WEST";
}
std::cout << this->getName() << " moved to " << moveStr << std::endl;
}
但这也没有用。为什么?我可以尝试什么?
您需要 break
关键字,否则 printMove()
将始终导致 "WEST"。一旦计算机找到匹配的案例,它就会读取 switch
语句后面的代码。 break
关键字告诉计算机停止读取并在 switch
.
void Play::printMove(Direction dir) {
std::string moveStr;
switch (dir) {
case NORTH:
moveStr = "NORTH";
break;
case SOUTH:
moveStr = "SOUTH";
break;
case EAST:
moveStr = "EAST";
break;
case WEST:
moveStr = "WEST";
break;
}
std::cout << this->getName() << " moved to " << moveStr << std::endl;
}