首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

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

热点排行