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

时间:2013-04-22 06:53:33

标签: c++ char cin

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

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

char selection;

cin>> selection;

if (selection == 1) return 1;

等...

有没有一种常见的方法呢?同样,我不想使用单引号。

由于

4 个答案:

答案 0 :(得分:4)

您可以创建一个小实用功能:

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;
}

您可以像这样使用它:

char selection;
std::cin >> asNumber(selection);

答案 1 :(得分:3)

没有必要保存三个字节(或者为零,因为编译器可能会对齐堆栈......)并使代码复杂化以读取数字。只要正常做,并将节省的记忆力放在重要的地方(如果你不知道它在哪里重要,那可能无关紧要。)

int selection;
if(!(cin >> selection) || selection < 0 || selection > 10) {
    // hmmm do something about it; perhaps scold the user.
}
place_where_it_is_getting_stored = selection;

答案 2 :(得分:1)

char selection;
cin >> selection;
selection -= '0';

答案 3 :(得分:-1)

也许你应该尝试

if (selection - '0' == 1) return 1;

这是您情况下最简单的方法