Меня попросили создать простую программу.См. Ниже:
"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 integer\n" << endl;
}
catch (NegativeException& ex1)
{
cout << ex1.what();
cout << "Try another integer\n" << endl;
}
}
return 0;
}
Когда я ввожу букву, я ожидаю, что на выходе будет указано "Exception: bad_typeid Попробуйте другоецелое».Однако, когда я ввожу букву вместо int, bad_typeid не перехватывается.Кажется, он возвращает 0 и выдает «Факториал 0 равен 1».Затем запускается блок while (1), который создает бесконечный вывод вышеприведенного сообщения.
Я ценю ваше время и помощь.