使用std::cin时如何重置它

How to reset std::cin when using it?

本文关键字:何重置 cin std 使用      更新时间:2023-10-16

我有一些问题与以下代码。我用它在Xcode (OS X)。

for ( unsigned char i = 0; i < 5; i++ ) {
            
    int value;
    std::cout << ">> Enter "value": ";
    std::cin >> value;
    
    if ( std::cin.fail() ) { std::cout << "Error: It's not integer value!n"; } else { std::cout << "The value format is ok!n"; }
    
    std::cout << "value = " << value << std::endl;
    
}

这里我只是在一个循环中输入了5个值。每次我检查错误。当我设置错误的值("asdf")时,std::cin发疯了,不再工作了。看到这个:

>> Enter "value": 90
The value format is ok!
value = 90
>> Enter "value": 2343
The value format is ok!
value = 2343
>> Enter "value": 34
The value format is ok!
value = 34
>> Enter "value": asdf
Error: It's not integer value!
value = 0
>> Enter "value": Error: It's not integer value!
value = 0
80
32423
adf
3843
asdf
asdf
23423

如何输入reset std::cin?我尝试输入另一个值,但我不能,因为std::cin似乎不再工作后,我的错误值。

您可以使用,当条件发生时,std::cin.fail():

std::cin.clear();
std::cin.ignore();

然后继续循环,使用continue;语句。std::cin.clear()清除错误标志,并设置新的错误标志,std::cin.ignore()有效地忽略错误标志(通过提取和丢弃)。

来源:

  1. cin.ignore()
  2. cin.clear()