出现错误时,cin会做什么

use*_*903 8 c++ error-handling cin

#include<iostream>;

int main()
{
    int a = 1;
    int b = 2;
    std::cin >> a >> b;
    std::cout << a << "+" << b << "=" << a+b << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我3 4作为输入输入时,输出将是3+4=7,这很奇怪; 但是当我进入时a b,输出是0+0=0(为什么它是0和0?); 最令人困惑的a 4是,0+0=0(为什么不'0 + 4 = 4'?????); 然后我写另一个编程.

#include<iostream>;

int main()
{
    int a = 1;
    int b = 2;
    std::cin >> a;
    std::cin.clear();
    std::cin >> b;
    std::cout << a << "+" << b << "=" << a+b << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我进入时a 4,它为什么还在0+0=0?它应该不是0+4=4吗?

感谢所有热情的人!

我写prog3,测试当我不写的时候会发生什么int a=1;int b=2;

2

#include <iostream>
using namespace std;
int main()
{  
    int a,b;
    cin >> a  ;
    cin >> b;
    cout<< a << "+"<< b <<"="<< a+b << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

a b再次,它输出0+-1218170892=-1218170892(为什么不0+0=0?)

Dri*_*ise 3

像所有的一样istreamsstd::cin有错误位。当错误发生时,这些位被设置。例如,您可以使用good()bad()eof()等函数查找错误位的值。如果您读取到错误的输入(fail()返回true),请使用clear()来清除标志。您可能还需要ignore(1);删除有问题的角色。

请参阅 参考资料State functions部分以获取更多信息。http://en.cppreference.com/w/cpp/io/basic_ios