我想要实现的很简单,如果输入不是整数,则应显示“数字无效”。
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块中缺少什么?
答案 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;
}