当我输入字符串而不是整数时,为什么它在VScode上打印0和1 ?
#include <iostream>
using namespace std;
int main()
{
int a , b ;
cout<<"give the value of a and b : ";
cin>>a>>b;
cout<<"a :"<<a<<"b : "<<b;
return 0;
}
你能告诉我,这些0和1是默认的输入还是它们只是一个垃圾?
这是因为当提取失败时,将0写入值,如下面的语句所示:
如果提取失败(例如,如果在需要输入数字的地方输入了字母),0被写入value并设置
failbit
. 对于有符号整数,如果提取结果的值太大或太小而无法装入值,则分别写入std::numeric_limits<T>::max()
或std::numeric_limits<T>::min()
,并设置failbit标志。对于无符号整数,如果抽取结果的值太大或太小而无法装入值,则写入std::numeric_limits<T>::max()
并设置failbit
标志。
因此,当第一次提取std::cin >> a
失败时,设置failbit
,并将a
设置为0
。这就是为什么第一个输出得到0
。
但是请注意,由于failbit是在第一次提取中设置的,b
不会得到任何值,即它具有不确定的值,并且使用该值(您在std::cout<<b
中所做的)是未定义行为.