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