我偶然发现了这个无限循环。我应该检查用户的输入不是整数以外的任何类型,也不是负数。 为什么我会得到这个无限循环,更重要的是我如何对输入施加这些限制?
'use strict';
var myNewArray = Array(...[,,]);
console.log(myNewArray);
答案 0 :(得分:2)
如果操作符>>
由于输入与目标类型不匹配而失败,则字符将保留在流中(即使您清除了失败位)。
因此,如果您反复重复相同的读取操作,它将一次又一次地失败。通常,在这种情况下,您将跳过/忽略字符。以下示例直接取自Alex Harvey:
int main()
{
std::istringstream input("1\n"
"some non-numeric input\n"
"2\n");
for(;;) {
int n;
input >> n;
if (input.eof() || input.bad()) {
break;
} else if (input.fail()) {
input.clear(); // unset failbit
input.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // skip bad input
} else {
std::cout << n << '\n';
}
}
}
答案 1 :(得分:1)
如果cin.fail()
为真 - 我们很乐意进行循环
在第一次尝试读取两个失败的数字后,您清除状态并再试一次。这是没有阅读违规项目。由于数据留在流中,它必然会再次失败。
您需要添加逻辑,在读取失败时,您采取适当的操作 - 例如阅读有问题的数据