This code is supposed to check if a user-inputted number is a prime number or not. I am executing the program on the cygwin terminal, and whenever I run it and enter a number, it says, "Segmentation fault (core dumped)". Any suggestions?
#include <stdio.h>
int prime(int num, int i, int count);
void main()
{
int num, i=2, count=0, result;
printf("Please enter a number: ");
scanf("%d", &num);
result = prime(num, i, count);
if (result != 0)
printf("num is not a prime number");
else
printf("num is a prime number");
}
int prime(int num, int i, int count)
{
if (i < num)
{
if (num%i == 0)
{
count++;
prime(num, i++, count);
}
else
prime(num, i++, count);
}
return count;
}
You use post increment i++ in your function parameter. This absolutely does nothing. Because the post increment occurs after execution.
So your i variable is never incremented and makes infinite recursion which gives you segmentation fault.
You can fix it with pre-increment ++i or call function with i+1.
int prime(int num, int i, int count)
{
if (i < num)
{
if (num%i == 0)
{
count++;
prime(num, ++i, count);
}
else
prime(num, ++i, count);
}
return count;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With