使用时如何重置std::cin?
How to reset std::cin when using it?
我在使用以下代码时遇到了一些问题。我用在 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
如何输入复位std::cin?我尝试输入其他值,但我不能,因为 std::cin 在输入错误值后似乎不再有效。
当 std::cin.fail()
条件发生时,您可以使用:
std::cin.clear();
std::cin.ignore();
然后使用 continue;
语句继续循环。 std::cin.clear()
清除错误标志,并设置新的,std::cin.ignore()
有效地忽略它们(通过提取和丢弃它们)。
来源:
我在使用以下代码时遇到了一些问题。我用在 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
如何输入复位std::cin?我尝试输入其他值,但我不能,因为 std::cin 在输入错误值后似乎不再有效。
当 std::cin.fail()
条件发生时,您可以使用:
std::cin.clear();
std::cin.ignore();
然后使用 continue;
语句继续循环。 std::cin.clear()
清除错误标志,并设置新的,std::cin.ignore()
有效地忽略它们(通过提取和丢弃它们)。
来源: