Search code examples
cfactorial

Factorial issue with user input


I am learning c language and i am confused about the code below. its a recursion but how come when i run this code, it won't run until i provided 2 different inputs but system only execute the first?

Thanks in advance.

#include <stdio.h>

long factor (float user_input)
{
if(user_input <=1)
return 1;
else
return (user_input * factor (user_input - 1));
}

int main ()
{
int user_input;
long factorial_calculation;
printf("what factorial number would you like to calculate?\n");
scanf("%d\n", &user_calculation);
factorial_calculation = factor (user_input);
printf("ld\n", factorial_calculation);
return 0;
}

Solution

    1. Your user_input is int but you are passing variable as a float and running your factorial function on it. Factorials are undefined for non-integer nos, so you are better off using int.

    2. In:

      printf("ld\n", factorial_calculation);
      

      ld is an invalid format specifer.

    3. In

      scanf("%d\n", &user_calculation);
      

      I think you meant

      scanf("%d", &user_input);
      

    The following code works:

    #include <stdio.h>
    
    int factor (int user_input)
    {
        if(user_input <=1)
            return 1;
        else
            return (user_input * factor (user_input - 1));
    }
    
    int main ()
    {
        int user_input;
        long factorial_calculation;
        printf("what factorial number would you like to calculate?\n");
        scanf("%d", &user_input);
        printf("%d\n",user_input);
        factorial_calculation = factor (user_input);
        printf("%d\n", factorial_calculation);
        return 0;
    }