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