C++ 为什么我的用户定义函数的返回语句不';你在什么情况下不工作?

C++ 为什么我的用户定义函数的返回语句不';你在什么情况下不工作?,c++,return,user-defined-functions,prime31,C++,Return,User Defined Functions,Prime31,我的素数检查函数将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_functio

我的素数检查函数将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;
}
它应该打印一次“转到主功能”,然后转到主功能。但它没有,它会遍历整个函数,然后进入主函数。有人能帮我解决这个问题吗?

代替

prime_function(num,++i);
你想要

return prime_function(num,++i);
而不是

prime_function(num,++i);
你想要

return prime_function(num,++i);
而不是

prime_function(num,++i);
你想要

return prime_function(num,++i);
而不是

prime_function(num,++i);
你想要

return prime_function(num,++i);

您需要检查递归调用
prime_函数的返回值
;此时,它的返回值被忽略,在不应该返回的情况下,函数将返回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;
}

else if((i*i)+1您需要检查递归调用
prime_函数的返回值;此时它的返回值被忽略,如果不应该,函数将返回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;
}

else if((i*i)+1您需要检查递归调用
prime_函数的返回值;此时它的返回值被忽略,如果不应该,函数将返回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;
}

else if((i*i)+1您需要检查递归调用
prime_函数的返回值;此时它的返回值被忽略,如果不应该,函数将返回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;
}

else如果((i*i)+1可以,但你能解释一下它是如何解决我的问题的吗?@AhashanAlamSojib,因为递归就是这样工作的。我建议看一个更简单的例子,例如计算阶乘:
int fac(int i){return(i==1)?(1):(i*fac(i-1));}
是的,我对阶乘函数使用了直接返回赋值。我想我对从返回调用函数感到困惑。谢谢@AlanStokes…它工作得很好,但你能解释一下它是如何解决我的问题的吗?@AhashanAlamSojib,因为递归就是这样工作的。我建议看一个更简单的例子,例如计算阶乘:
intfac(inti){return(i==1)?(1):(i*fac(i-1));}
是的,我对阶乘函数使用了直接返回赋值。我想我对从返回调用函数感到困惑。谢谢@AlanStokes…它工作得很好,但你能解释一下它是如何解决我的问题的吗?@AhashanAlamSojib,因为递归就是这样工作的。我建议看一个更简单的例子,例如计算阶乘:
intfac(inti){return(i==1)?(1):(i*fac(i-1));}
是的,我对阶乘函数使用了直接返回赋值。我想我对从返回调用函数感到困惑。谢谢@AlanStokes…它工作得很好,但你能解释一下它是如何解决我的问题的吗?@AhashanAlamSojib,因为递归就是这样工作的。我建议看一个更简单的例子,例如计算阶乘:
intfac(inti){return(i==1)?(1):(i*fac(i-1));}
是的,我在阶乘函数上使用了直接返回赋值。我想我对从return调用函数感到困惑。谢谢@AlanStokes。。。