2011-04-14 25 views
1

这可能看起来像一个奇怪的问题,但当cin请求时,如果它收到错误的类型它仍然会继续,但cin的状态更改。如何正确使用iostream cin?

我该如何循环,直到cin没问题,例如,当我要求一个数字时,如果没有给出额外的代码,它就“接受”一个字符串,例如一个循环?

最后,当我连续多次使用cin时,它会按预期执行第一个cin,但随后跳过其余部分;我该如何解决?如果您需要更多信息,请在评论中提问。

// Example 
cout << "Enter a number: "; 
cin >> num; // A string is given 

cout << "Enter another number: "; 
cin >> num2; 

在上面的例子中,字符串会被接受,第二个cin很可能会因为某种原因跳过。我前一阵子找到这个问题的答案,但我失去了我用这样的循环的片段:/

+3

的一小段代码,几乎你想要做将是有益的什么。 – 2011-04-14 21:52:33

回答

2

例如:

int value; 
while(!(cin >> value)) 
{ 
    cin.clear(); 
    cin.ignore(); // eat one character 
} 

while(!(cin >> value)) 
{ 
    cin.clear(); 
    cin.ignore(10000,'\n'); // eat the rest of the line 
} 
+0

+1,同时http://cplusplus.com/reference/iostream/ios/operatornot/ – Dacav 2011-10-13 11:52:10