尝试不捕获非整数输入

时间:2013-08-02 22:32:08

标签: c++ try-catch

我想要实现的很简单,如果输入不是整数,则应显示“数字无效”。

Number已设置为整数(int number)。

#include <iostream>

using namespace std;

int main(){
    int number;
    try{
        cin >> number;
    }catch(const ios::failure &){
        cout << "Number is invalid";
    }
}

输入结果 - &gt; 1是=&gt; 1和输入结果 - &gt; a is =&gt; a,所以它没有抓到任何东西。

我在这个try-catch块中缺少什么?

3 个答案:

答案 0 :(得分:9)

您必须启用例外。在致电cin.exceptions(istream::failbit);之前添加cin。默认情况下,iostream不使用异常(它们最初是在异常甚至不是C ++的一部分时设计的。)

答案 1 :(得分:1)

默认情况下,Streams不会抛出异常。如果您希望它们抛出异常,您需要通过调用exceptions()成员函数来启用它们。

std::cin.exceptions(std::istream::failbit);

答案 2 :(得分:0)

除非确实需要它们并了解它们的作用,否则不要在流中启用例外。大多数输入失败应该通过提示和重复来处理,而不是通过抛出异常来处理。经过多次失败,肯定会抛出异常。但这不是流的责任。

但是,如果您确实需要在输入失败时抛出异常,那么很容易做到:

try {
    std::cin >> number;
    if (!std::cin)
        throw whatever;
}