为什么功能不打印" true"当' 1'是两个变量的输入?我该如何解决这个问题?
int main() {
int i;
char c;
cout << "Type int: ";
cin >> i;
cout << "Type char: ";
cin >> c;
if (i == (int)c)
cout << "true" << endl;
else
cout << "false" << endl;
}
答案 0 :(得分:2)
即使char
是整数类型,>>
运算符也会处理它与其他整数类型不同。
对于非char整数收件人变量,>>
运算符将输入视为整数值的表示。整个表示从输入中消耗,转换为整数并存储在recepient变量中。例如,如果输入8
作为输入,则收件人变量(例如,int
)将接收整数值8
。如果输入42
作为输入,则收件人变量将收到整数值42
。
但对于char
收件人变量,>>
运算符将输入视为纯粹的字符序列。仅消耗该序列的第一个字符并立即存储在接收方变量中。例如,如果您输入8
作为输入,char
收件人变量将收到字符 '8'
,其对应于整数值56
。如果输入42
作为输入,则收件人变量将接收字符'4'
,其对应于整数值52
。
这就是导致你案件不平等的原因。
答案 1 :(得分:1)
与其他输入流对象一样,std::cin
设计为在您阅读不同类型时的工作方式不同。
对于int
,它会读取您写入控制台的数字并将其解析为内部整数形式。这很方便:“格式化提取”意味着我们可以立即获得有用的int
,并且不需要从字符串到数字进行任何转换。
对于char
,它会读取您写入控制台的实际字母或数字或标点符号;它没有解析它。它只是存储该角色。在这种情况下,c
为49,因为这是'1'
的ASCII值。
如果您想查看int
包含1
和char
包含'1'
是否匹配,那么您可以利用ASCII的属性,所有数字都是从48开始按顺序排列,或'0'
:
if (`i` == `c`-'0')
但是,如果您这样做,则应验证:
c
包含一个数字('0', '1', ..., '9'
)。如果可以的话,一般要避免这些黑客攻击。通常还有另一种检查输入的方法。