I'm trying to make a program to calculate the factorial; I want from the user to enter only positive integers so I declared my variables as "unsigned int" and I used cin.fail() to prevent the user from entering letters or negative numbers. The problem is when I enter a "negative number" the cin.fail() doesn't work.
I tried to use istringstream and it didn't work too.
/*
A program used to get the factorial of a number
*/
#include <iostream>
using namespace std;
class Factorial
{
public:
unsigned int CalcFactorial(unsigned int iEntry); //Function Prototype
private:
unsigned int iResult = 0;
};
unsigned int Factorial::CalcFactorial(unsigned int iEntry)
{
iResult = iEntry;
for (unsigned int iCount = (iEntry - 1); iCount >= 1; --iCount)
{
iResult *= iCount;
}
return iResult;
}
int main()
{
Factorial Fact;
unsigned int num = 0;
cout << "\t\t\t\t**********Welcome to Factorial Calculator**********\n\n\n";
cout << "Please enter an Integer number ==> \n";
enterAgain:
cin >> num;
cout << "\n";
if (cin.fail())
{
cout << "Please enter a correct number \n";
cin.clear();
cin.ignore(10000, '\n');
goto enterAgain;
}
else
{
if (num == 0)
cout << "Factorial of [" << num << "] is ==> " << 1 << "\n";
else
{
if (num > 0 && num <= 12)
cout << "Result is ==>" << Fact.CalcFactorial(num);
else
{
cout << "The entered number is BIG, Try another number!\n";
goto enterAgain;
}
}
}
}