我发现自己经常使用包含非常小范围的数字(通常从1到10)的变量,并希望通过使用char数据类型而不是int或甚至short来最小化我使用的内存量。我想将我的char变量值为cin而不将cin转换为它的ASCII等效值,而不使用单引号。即,以下内容:
cout<< "Pick from 1 to 10.";
char selection;
cin>> selection;
if (selection == 1) return 1;
等...
有没有一种常见的方法呢?同样,我不想使用单引号。
由于
答案 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;
这是您情况下最简单的方法