C++ 为什么cin中断时变量会发生变化?C++;
我有以下代码片段:C++ 为什么cin中断时变量会发生变化?C++;,c++,cin,C++,Cin,我有以下代码片段: int a = 1; double b = 3.14; string c = "hi"; cin >> a >> b >> c; cout << a << " " << b << " " << c << endl; inta=1; 双b=3.14; 字符串c=“hi”; cin>>a>>b>>c; 库特 当cin被破坏时,a的
int a = 1;
double b = 3.14;
string c = "hi";
cin >> a >> b >> c;
cout << a << " " << b << " " << c << endl;
inta=1;
双b=3.14;
字符串c=“hi”;
cin>>a>>b>>c;
库特
当cin
被破坏时,a
的值为什么会改变
这是自C++11以来的预期行为;如果提取失败,该值将设置为0
若提取失败,则将零写入值并设置failbit。如果提取导致值太大或太小而无法装入值,则会写入std::numeric\u limits::max()
或std::numeric\u limits::min()
,并设置failbit标志
请注意,设置failbit
后,将不会执行以下输入:;这意味着b
和c
将保持其原始值
顺便说一句:在C++11之前,当提取失败时,该值将保持不变
如果提取失败(例如,如果在预期数字的位置输入字母),则该值保持不变,并设置failbit
试试stringstream。下面是一个详细解释同一问题的链接:
那么“原始值”是3.14,“期望值”是3.13是结果吗?或者这个问题是关于一个完全不同的价值观?精确是很重要的。