int SelectedIndex;
int i = 4;
while(SelectedIndex > i-1 || SelectedIndex < 0)
{
try{
std::cout <<"please input index from 0 to " << i-1 << std::endl;
std::cin >> SelectedIndex;
}
catch(std::exception& e){SelectedIndex = 999;}
}
为什么输入字符串时这样的循环不会捕获错误? 怎么解决?我可以使用std :: string和Boost库以及reg exp。
答案 0 :(得分:1)
假设尝试使用std::cin
读取整数并检测用户是否输入了字符串:
如果用户确实输入了字符串,则会抛出不的异常(这就是您的代码无法按预期工作的原因)。相反,输入将保留在缓冲区中,cin
将处于错误状态。除非在下一次迭代之前清除错误状态和缓冲区,否则下一个cin >>
将在无限循环中从缓冲区读取相同的值。
参见this article,它解释了如何读取整数(以及输入字符串时会发生什么)以及如何清除错误状态和缓冲区。
答案 1 :(得分:0)
默认情况下,流库不会抛出异常。您必须首先启用它,如下例所示:
#include <iostream>
int main()
{
int number;
std::cin.exceptions(std::ios::failbit | std::ios::badbit | std::ios::eofbit);
std::cout << "enter a number: ";
try
{
std::cin >> number;
}
catch(const std::exception& e)
{
std::cout << e.what();
}
}