2016-12-28 61 views
8

我做了这个类:是否可以手动设置istream的失败位在C++ 11

class object { 
    // data... 
public: 
    friend std::istream& operator>>(std::istream& in, object& o) { 
    char c, d; 
    in >> c >> d; 
    if (c == d) { 
     /*set the fail bit some how*/ 
     in.putback(d); 
     in.putback(c); 
    } else 
     o.set_data(c, d); 
    return in; 
    } 
}; 

我一直在寻找的文件(不是很好),但未能找到一种合适的方式设置失败位。我关心的原因是我希望能像while(std::cin>>obj)/*do stuff*/;一样可以用int来做。但是,如果我现在这样做,每当出现错误时都会出现无限循环。 -_-设置失败位可能或者我将不得不以另一种方式处理这个问题?

+1

'in.setstate(std :: ios_base :: failbit)'' – 0x499602D2

回答

11

您可以使用basic_ios::setstate功能设置输入流的failbit:

in.setstate(std::ios_base::failbit); 
6

您可以使用setstate。请注意,您应该在调用putback之后放置它,否则将不会成功编辑putback,因为流已处于错误状态。即

if (c==d) { 

    in.putback(d); 
    in.putback(c); 

    /*set the fail bit some how*/ 
    in.setstate(std::ios_base::failbit); 
} 
相关问题