如何在使用时重置std :: cin?

时间:2016-09-02 01:10:04

标签: c++ std cin

我在使用以下代码时遇到了一些问题。我在Xcode(OS X)中使用它。

[取消了我对该代码的第一次尝试]

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

UPD2 在我的第二次尝试中,我使用此代码:

for ( unsigned char i = 0; i < 5; i++ ) {

    int value = 0;

    std::cout << "\n>> Enter \"value\": ";
    std::cin >> value;

    if ( std::cin.fail() ) {
        std::cin.clear();
        std::cin.ignore();
        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": 4
The value format is ok!
value = 4

>> Enter "value": 234
The value format is ok!
value = 234

>> Enter "value": asdfghjkl
Error: It's not integer value!
value = 0

>> Enter "value": Error: It's not integer value!
value = 0

>> Enter "value": Error: It's not integer value!
value = 0
234
234
78
345
657
345
dsf
f

1 个答案:

答案 0 :(得分:5)

当条件show databases; 发生时,您可以使用

std::cin.fail()

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

来源:

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