首页 > 解决方案 > 打印枚举文本而不是值 C++

问题描述

在 Form.h 我有:

enum Direction {
   NORTH = 0,
   SOUTH = 1,
   EAST = 2,
   WEST = 3,
};

在 Play.cpp 中,我有一种打印运动的方法,例如“PlayerA 移动到 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;
}

但这也不起作用。为什么?我可以尝试什么?

标签: c++printingenumeration

解决方案


您需要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;
}

推荐阅读