当我输入字符串而不是整数,那么为什么它在VScode上打印0和1 ?



当我输入字符串而不是整数时,为什么它在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中所做的)是未定义行为.

最新更新