Почему оператор возврата моей пользовательской функции не работает в некоторых случаях?

Моя основная функция проверки показывает 9,15 и т. Д. Как простую, где их нет. Мой код:

#include<iostream>
#include<cstdio>
using namespace std;
int prime_function(int num, int i);
int main(){
int num,flag=0;
while (cin>>num){
if(num!=1){
flag=prime_function(num,2);
if(flag==0)
printf("%d isn't a prime.\n",num);
else {
printf("%d is a prime.\n",num);
}
}
else {
printf("%d is a prime.\n",num);
}
}
return 0;
}

int prime_function(int num, int i)
{
if(num%i==0){
printf("when num mod i == 0, num=%d    i=%d\n",num,i);
return 0;//This Statement doesn't work for like num=9,15...
}
else if((i*i)+1<=num){
printf("when num mod i != 0, num=%d    i=%d\n",num,i);
prime_function(num,++i);
}
printf("Going to main function.\n");
return 1;
}

Я сделал код в основном графическим, чтобы можно было легко находить ошибки. Когда я ввожу 9, моя программа показывает как:

when num mod i != 0, num=9    i=2
when num mod i == 0, num=9    i=3
Going to main function.
Going to main function.
9 is a prime.

На нем должно быть напечатано «Переход к основной функции». один раз, а затем прийти к основной функции. Но это не так, и проходит через всю функцию, а затем приходит к основной функции. Кто-нибудь может мне помочь с этой проблемой?

0

Решение

Вместо

prime_function(num,++i);

Ты хочешь

return prime_function(num,++i);
2

Другие решения

Вам необходимо проверить возвращаемое значение вашего рекурсивного вызова prime_function; в данный момент его возвращаемое значение игнорируется, и функция возвращает true в тех случаях, когда это не должно происходить.

else if((i*i)+1<=num){
printf("when num mod i != 0, num=%d    i=%d\n",num,i);
if (!prime_function(num,++i))
return 0;
}
1

По вопросам рекламы [email protected]