You can create a small useful function:
struct CharReader { char &c; CharReader(char &c) : c(c) {} }; CharReader asNumber(char &c) { return CharReader(c); } template <typename T, typename Traits> std::basic_istream<T, Traits>& operator>> (std::basic_istream<T, Traits> &str, const CharReader &c) { short i; str >> i; cc = static_cast<char>(i); return str; }
You can use it like this:
char selection; std::cin >> asNumber(selection);
source share