2016-12-28 67 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); 
} 
相關問題