2011-03-28 59 views
0

cin.ignore(100,'\n')工作,如果我只是使用标准cin通过流?C++:在使用cin.ignore之前是否需要使用cin.get()?

例子:

cin >> temp; //enter key input 
if(cin.fail()) 
{ 
    cin.clear(); 
    cin.ignore(100,'\n'); 
} 

或做我必须使用cin.get()?

实施例:

temp=cin.get(); 
if(cin.fail()) 
{ 
    cin.clear(); 
    cin.ignore(100,'\n'); 
} 

或将这些代码产生相同的结果?

+2

您是否试图执行它,看看会发生什么?此外,期望的行为是什么,“temp”的类型是什么? – 2011-03-28 08:07:37

+0

是的,我有,不幸的是,这两个似乎并没有按照我喜欢的方式工作,因此这个问题。 temp是一个'int',所以当用户在键盘上混杂时,它应该清除错误。它的工作原理是这样的,但它会打印一个额外的换行符并暂停,直到我再次按回车。 – dukevin 2011-03-28 08:08:37

+0

然后请描述你想如何表现。 – 2011-03-28 08:09:30

回答

0

啊,愚蠢的我,我做了一个函数来调用清理

void clear() 
{ 
    cin.clear(); 
    cin.ignore(100,'\n'); 
} 

,并在我的程序,它调用的函数clear()不止一次。在连续两次调用clear()而没有cin输入的情况下,它会提示输入空行。

我猜这是造成它的原因。

+0

后续问题:有没有更有效的方法来清除垃圾的输入? – dukevin 2011-03-28 08:46:39

+0

不,clear()只是清除一些状态标志。调用它两次没有害处。 – 2011-03-28 08:59:16

+0

对不起,混乱,我的函数名为clear()而不是cin.clear()..所以调用我的clear()函数会让它提示换另一个换行符 – dukevin 2011-03-29 02:16:16

相关问题