2016-01-04 54 views
3
int main() 
{ 
int a=0; 
int b=0; 
std::cout<<"Please enter an int: "<<std::endl; 
std::cin>>a; 
auto old_state =std::cin.rdstate(); // remember the current state of cin 
std::cin.clear(); // make cin valid 
std::cout<<"Please enter another int: "<<std::endl; 
std::cin>>b;// use cin 
auto new_state = std::cin.rdstate(); 
if(old_state==std::istream::failbit&&new_state==std::istream::failbit) 
//I tried std::ostream,std::iostream,ios_base they all work. 
std::cout<<"Both are failbit!"<<std::endl; 
} 

我刚刚遇到了有关C++入门的IO章节。我自己试过这个代码,并且出乎意料地发现,对于最后两行,我将std::istream改为std::ostream,std::iostream,std::ios_base,当我输入两个char时,它们都似乎工作。有人请帮助用简单的语言来解释,为什么会发生这种情况。提前谢谢了!为什么istream,ostream,iostream,ios_base都在这里工作

+0

除非你需要所有额外的东西,否则不要使用'std :: endl'。 ''\ n''开始一个新行。 –

+0

@PeteBecker哦,我明白你的意思了。 cin与cout绑定,因此不需要endl来清除缓冲区。感谢您指出这一点!:) – Des1gnWizard

回答

3

由于failbitios_base一个public构件和所有其他类public LY从ios_base继承。

+1

爱你的评论:-)稍后接受你的答案! – Des1gnWizard

相关问题