Reputation: 83
I want to print the text value of an enum, if I enter 5, it will print F1. If i enter 63, it has to print H8. In the code below, I tried cout << "You chose: " << board_square(chosen_piece) << endl, but it prints the value twice.
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;
}
Upvotes: 0
Views: 5370
Reputation: 254431
Enumerator names aren't available at run-time; they are just a convenient way give names to numbers in the source. You will need some run-time code to convert numeric values into run-time strings, perhaps something like:
std::string label(int row, int col) {
return {char('A'+row), char('1'+col)};
}
Upvotes: 1
Reputation: 63745
Your runtime C++ executable is not designed to know the names of all the symbols you create.
In the case of your specific problem, it's pretty easy to generate a matching name.
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;
}
Upvotes: 2
Reputation:
I want to print the text value of an enum
That's not something simple. This is an XY problem, I feel. What you could do instead (assuming a locale in which letters of the alphabet are in order):
string name;
name += (char)(column + 'A');
name += (char)(line + '1');
cout << "You chose: " << name << endl;
Upvotes: 1