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是结果吗?或者这个问题是关于一个完全不同的价值观?精确是很重要的。