抱歉这个极端的noob问题,
我正在使用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);
}
}
谢谢!
答案 0 :(得分: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
}
答案 1 :(得分:2)
您需要使用cin.clear()
来清除错误状态。