Reputation: 25
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;
}
Upvotes: 1
Views: 75
Reputation: 11649
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
.
In:
printf("ld\n", factorial_calculation);
ld
is an invalid format specifer.
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;
}
Upvotes: 4
Reputation: 57784
scanf()
is notoriously difficult to synchronize with user input. Instead, use fgets()
and inspect the string for a number (or numbers if more than one is expected per line).
long factorial_calculation;
char buf [1000];
for (;;)
{
printf("What factorial number would you like to calculate?\n");
if (!fgets (buf, sizeof buf, stdin)) /* probably EOF, hangup, etc.: just exit */
return 0;
if (1 != sscanf(buf, "%ld", &user_calculation))
{
printf ("No number entered, please try again\n");
continue;
}
factorial_calculation = factor (user_input);
}
Upvotes: 2