读书人

清空cin缓冲区的时分为什么要cin.clea

发布时间: 2012-11-05 09:35:12 作者: rapoo

清空cin缓冲区的时候为什么要cin.clear()之后才能cin.ignore()
想实现如果输入回车作为文件名的时候,则读取默认的文件的功能,现在有一个问题,如果把cin.clear()注释掉以后,则第二次cin文件名的时候,会直接不跳过输入(我猜可能是第一个回车还在缓冲区的原因)。我想问,为什么要加上cin.clear()以后,cin.ignore()才起作用呢?

代码如下:

C/C++ code
#include <fstream>#include <iostream>#include <string>using namespace std;int main(){    string file1,file2;    cout<<"请输入默认文件1:";    cin.unsetf(ios::skipws);    cin>>file1; //输入回车    //TODO:为file1设置默认的文件名1    cin.clear(); //如果注释掉这一句以后,下面的cin不等待输入    cin.ignore();    cout<<"请输入默认文件2:";    cin>>file2; //输入回车    //TODO:为file2设置默认的文件名2}


[解决办法]
因为状态位已经设置了,所以要清除状态位,然后ignore(),如果不clear,ignore没作用。

读书人网 >C++

热点推荐