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都在这里工作
除非你需要所有额外的东西,否则不要使用'std :: endl'。 ''\ n''开始一个新行。 –
@PeteBecker哦,我明白你的意思了。 cin与cout绑定,因此不需要endl来清除缓冲区。感谢您指出这一点!:) – Des1gnWizard