我有以下代码片段:
int a = 1;
double b = 3.14;
string c = "hi";
cin >> a >> b >> c;
cout << a << " " << b << " " << c << endl;
Run Code Online (Sandbox Code Playgroud)
如果我进入apple 11 tammy,为什么它会cout:0 3.14 hi而不是:1 3.14 hi?
为什么破坏a时的变化价值cin?
为什么破坏
a时的变化价值cin?
这是自C++ 11以来std :: basic_istream :: operator >>的预期行为; 如果提取失败,则值将设置为0.
如果提取失败,则将零写入值并设置failbit.如果提取导致值太大或太小而无法拟合值,
std::numeric_limits<T>::max()或者std::numeric_limits<T>::min()被写入并且设置了failbit标志.
请注意,failbit设置后,将不执行以下输入; 这意味着b和c将保持其原始值.
BTW:在C++ 11之前,当提取失败时,该值将保持不变.
如果提取失败(例如,如果输入了预期数字的字母),则值保持不变,并设置failbit.