打印枚举的文本值,而不是值

时间:2013-04-23 18:20:17

标签: c++ enums cout

我想打印枚举的文本值,如果我输入5,它将打印F1。如果我输入63,则必须打印H8。在下面的代码中,我尝试了cout<< “你选择了:”<< board_square(chosen_piece)<< endl,但它会打印两次值。

enum board_square {
    A1 = 1, B1, C1, D1, E1, F1, G1, H1,
    A2, B2, C2, D2, E2, F2, G2, H2,
    A3, B3, C3, D3, E3, F3, G3, H3,
    A4, B4, C4, D4, E4, F4, G4, H4,
    A5, B5, C5, D5, E5, F5, G5, H5,
    A6, B6, C6, D6, E6, F6, G6, H6,
    A7, B7, C7, D7, E7, F7, G7, H7,
    A8, B8, C8, D8, E8, F8, G8, H8,
};

int choose_piece()
{
    using namespace std;
    cout << "X Location?" << endl << ">";
    int column;
    cin >> column;
    cout << "Y Location?" << endl << ">";
    int line;
    cin >> line;
    //This formula calculates which square is placed on the dimensions you entered
    int chosen_piece = (column + (line - 1) * 8);
    return chosen_piece;
}

int main()
{
    using namespace std;
    cout << "Enter dimensions for the piece you want to move" << endl;
    int chosen_piece = choose_piece();
    cout << chosen_piece << endl;
    //How can I get it to print the enum for it here?
    cout << "You chose: " << board_square(chosen_piece) << endl; //This doesn't work either :(
    return 0;
}

3 个答案:

答案 0 :(得分:2)

您的运行时C ++可执行文件并非旨在了解您创建的所有符号的名称。

如果您遇到特定问题,生成匹配名称非常容易。

std::string name_of( board_square s )
{
    std::string name;
    name += 'A' + int(s) % 8;  // First character
    name += '1' + int(s) / 8;  // Second character
    return name;
}

答案 1 :(得分:1)

  

我想打印枚举的文本值

这不是简单的事情。我觉得这是一个XY问题。您可以做什么(假设字母表中的字母顺序排列的区域设置):

string name;
name += (char)(column + 'A');
name += (char)(line + '1');
cout << "You chose: " << name << endl;

答案 2 :(得分:1)

在运行时无法使用枚举器名称;它们只是一种方便的方式,可以为源中的数字命名。您将需要一些运行时代码将数值转换为运行时字符串,可能类似于:

std::string label(int row, int col) {
    return {char('A'+row), char('1'+col)};
}