3

对不起这个极端的菜鸟问题,

我正在使用具有 5 次迭代的 for 循环。每次循环时,我都会提示用户输入小数,我使用 cin >> aDouble。如果我输入任何数字,它都可以正常工作,但如果我输入一个字符串,它会循环五次,然后继续。

这是我的代码。

for(int i = 0; i <= ARRSIZE; i++)
{
    cout << "Please enter a decimal value: ";
    cin >> myDouble;

    if (!cin.fail() )
    {
        myVector.push_back(myDouble);
    }
}

谢谢!!

4

2 回答 2

4

一旦流无法读取它设置的值std::ios_base::failbit,该位​​将保持设置状态,直到它被清除。当设置了错误位时,流不做任何事情。也就是说,如果cin.fail()true也处理这个问题:你需要摆脱“字符串”:

if (std::cin.fail()) {
    std::cin.clear();
    std::cin.ignore();                                  // ignore one character or ....
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // rest of line
}
于 2012-10-18T03:56:14.343 回答
2

您需要使用cin.clear()来清除错误状态。

于 2012-10-18T03:46:15.203 回答