代码:
int a;
cin>>a;
cout<<a<<endl;
然后我使用g++ test.cpp
并运行它。然后我在变量a输入一个字母'b'。输出为0.
但是,当我测试其他代码时:
cout<<int('b')<<endl; // output: 98
为什么呢?有什么不同?
答案 0 :(得分:4)
std::cin
是一个对象,是std::istream
的一个实例。 std::istream
已将>>
重载为支持a variety of types。其中一种类型是&int
。如果std::istream
左侧有>>
,右侧有整数引用,则调用方法istream& operator>> (int& val)
。该方法的概念实现如下。
当您提供“b”作为istream& operator>> (int& val)
的输入时,它会立即在您的int
变量中存储“累计”0。例如:
#include <iostream>
int main (const int argc, const char * const argv[]) {
int b = 100;
std::cout << b << std::endl;
std::cin >> b;
std::cout << b << std::endl;
return 0;
}
执行:
100
b
0
对于强制类型转换,当您将值'b'
强制转换为整数时,内存中的字节值为98,然后将其作为整数打印。当您使用>>
时,内存中的结果值为0,然后您将其作为整数打印。
答案 1 :(得分:2)
您尝试执行的输入操作失败。由于a
是int
cin
,因此需要int
。因为它得到char
它失败了。您可以通过将代码更改为:
int a;
cin>>a;
if(!cin)
cout << "input failed";
else
cout<<a<<endl;
输入:
a
输出:
input failed
请参阅此live example
答案 2 :(得分:0)
当您使用&#39; b&#39;要查看整数值,您的程序会认为您输入的数字无效,因此它不会按int(&#39; b&#39;)分配值。仍然使用
的初始值答案 3 :(得分:0)
不确定你是否发现了这个:
char a;
cin >> a;
cout << a << endl;
尝试将int
更改为char
,
当您输入3
时,它会输出3
;
当您输入b
时,它会输出b
;
如果你想输出ascii,你可以像cout那样制作cout:
cout << (int) a << endl;
然后当您输入98
b
答案 4 :(得分:0)
如果提取失败(例如,如果输入的字母是数字, 预期),值将保持不变,并设置故障位。 (直到C ++ 11)
如果提取失败,则将零写入值并设置故障位。如果 提取导致该值太大或太小而无法容纳 值,std :: numeric_limits :: max()或std :: numeric_limits :: min() 写入并设置了故障位标志。 (自C ++ 11起)
来自https://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt