如何修复bad_typeid异常
How to fix bad_typeid exception
我被要求创建一个简单的程序。见下文:
"1.编写一个简单的程序,使用递归来计算数字的阶乘 - 如果用户输入负整数或非整数数据类型来计算阶乘,请确保抛出异常。
我创建了程序来将数字的阶乘计算成一个 while 块,允许用户进行无限次尝试。我的 try-catch 块适用于负异常,但是,非整数异常不起作用。
int Factorial(int input)
{
if (input > 1)
return input * Factorial(input - 1);
else if (input < 0)
throw NegativeException(input);
else
return 1;
}
int main()
{
using std::cout;
using std::cin;
int input;
while (1)
{
try
{
cout << "Please enter an integer to find its factorial: ";
cin >> input;
cout << "The factorial of " << input << " is " << Factorial(input) << endl;
}
catch (const std::bad_typeid & ex)
{
cout << "Exception: " << ex.what();
cout << "Try another integern" << endl;
}
catch (NegativeException& ex1)
{
cout << ex1.what();
cout << "Try another integern" << endl;
}
}
return 0;
}
当我输入一个字母时,我希望输出显示"异常:bad_typeid尝试另一个整数"。但是,当我输入字母而不是整数时,bad_typeid不会被捕获。它似乎返回 0 并输出"0 的阶乘为 1"。while(1( 块随后被触发, 并创建上述消息的永无止境的输出。
感谢您的时间和帮助。
bad_typeid
不是这样工作的。当typeid
应用于取消引用的空指针时,将引发它。在这种情况下完全无关紧要。
例如,如果用户输入
5.5
然后std::cin >> input
会尝试输入一个整数(在本例中为 5(。如果用户输入的字母类似
foo
然后std::cin >> input
将设置failbit
并且不会引发异常。
相关文章:
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 为什么异常不退出程序?
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- C++typeid模板值转换为联合不可接受的转换
- 是什么导致了Unity 3D中的"错误线程异常"?
- 使用typeid警告未使用的变量
- 如何将strftime中的格式错误作为异常捕获
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 尝试使用智能指针时引发异常
- 函数如何通知用户它基于函数原型抛出异常?
- 从 typeid 成功返回是否保证dynamic_cast不会引发异常?