0

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

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

#include <iostream>

using namespace std;

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

输入 -> 1 的结果是 => 1,输入 -> a 的结果是 => a,所以它没有捕捉到任何东西。

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

4

3 回答 3

9

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

于 2013-08-02T22:36:31.110 回答
1

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

std::cin.exceptions(std::istream::failbit);
于 2013-08-02T22:36:47.997 回答
0

不要在流中启用异常,除非您确实需要它们并了解它们的作用。大多数输入失败应该通过提示和重复来处理,而不是通过抛出异常来处理。在多次失败之后,当然,抛出异常。但这不是流的责任。

但是,如果您确实需要在输入失败时引发异常,则很容易做到:

try {
    std::cin >> number;
    if (!std::cin)
        throw whatever;
}
于 2013-08-03T11:09:20.643 回答