当cin中断时,为什么会发生变量?C++

csg*_*guy 2 c++ cin

我有以下代码片段:

    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

son*_*yao 6

为什么破坏a时的变化价值cin

这是自C++ 11以来std :: basic_istream :: operator >>的预期行为; 如果提取失败,则值将设置为0.

如果提取失败,则将零写入值并设置failbit.如果提取导致值太大或太小而无法拟合值,std::numeric_limits<T>::max()或者std::numeric_limits<T>::min()被写入并且设置了failbit标志.

请注意,failbit设置后,将不执行以下输入; 这意味着bc将保持其原始值.

BTW:在C++ 11之前,当提取失败时,该值将保持不变.

如果提取失败(例如,如果输入了预期数字的字母),则值保持不变,并设置failbit.