gpt4 book ai didi

c++ - 如何修复 bad_typeid 异常

转载 作者:太空宇宙 更新时间:2023-11-04 12:35:49 24 4
gpt4 key购买 nike

我被要求创建一个简单的程序。见下文:

“1. 编写一个简单的程序,使用递归来计算一个数的阶乘——如果用户输入负整数或非整数数据类型来计算阶乘,请确保抛出异常。”

我创建了一个程序来计算一个数字的阶乘到一个 while block 中,允许用户进行无限次尝试。我的 try-catch block 适用于否定异常,但是,非整数异常不起作用。

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 integer\n" << endl;
}
catch (NegativeException& ex1)
{
cout << ex1.what();
cout << "Try another integer\n" << endl;
}
}

return 0;
}

当我输入一个字母时,我希望输出显示“Exception: bad_typeid Try another integer”。但是,当我输入字母而不是 int 时,不会捕获 bad_typeid。它似乎返回 0 并输出“0 的阶乘为 1”。然后触发 while(1) block 并创建上述消息的永无止境的输出。

非常感谢您的时间和帮助。

最佳答案

bad_typeid 不是这样工作的。当 typeid 应用于取消引用的空指针时抛出。在这种情况下完全无关紧要。

例如,如果用户输入

5.5

然后 std::cin >> input 将尝试输入一个整数(在本例中为 5)。如果用户输入了一个字母,比如

foo

然后 std::cin >> input 将设置 failbit 并且不会抛出异常。

关于c++ - 如何修复 bad_typeid 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56407595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com