C ++如何将字符作为数字而不是字符作为字符

use*_*321 5 c++ cin char

我发现自己经常使用包含非常小的数字范围(通常从1到10)的变量,并希望通过使用char数据类型而不是int甚至是short来最小化我使用的内存量。我想将cin值转换为char变量,而无需将cin转换为ASCII等效值,也无需使用单引号。即,以下内容:

cout<< "Pick from 1 to 10.";

char selection;

cin>> selection;

if (selection == 1) return 1;
Run Code Online (Sandbox Code Playgroud)

等等...

有一种通用的方法吗?同样,我不想使用单引号。

谢谢

Rei*_*ica 5

您可以创建一个小实用函数:

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;
  c.c = static_cast<char>(i);
  return str;
}
Run Code Online (Sandbox Code Playgroud)

你可以像这样使用它:

char selection;
std::cin >> asNumber(selection);
Run Code Online (Sandbox Code Playgroud)


Kin*_*hen -1

也许你应该尝试

if (selection - '0' == 1) return 1;
Run Code Online (Sandbox Code Playgroud)

这是根据您的情况最简单的方法

  • 用户将很难选择选项 10。 (2认同)