清空cin缓冲区的时分为什么要cin.clear()之后才能cin.ignore()

清空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没作用。