为什么我的用户定义函数的 return 语句在某些情况下不起作用?

Why a return statement of my user defined function doesn't work at some case?

本文关键字:情况下 不起作用 语句 return 用户 我的 定义 函数 为什么      更新时间:2023-10-16

我的一个素数检查函数显示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=%dn",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=%dn",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.

它应该打印一次"Going to main function.",然后进入main function。但是它没有,它遍历整个函数,然后到达main函数。有人能帮我解决这个问题吗?

代替

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

return prime_function(num,++i);

您需要检查递归调用prime_function的返回值;目前,它的返回值被忽略了,在不应该返回true的情况下,函数将返回true。

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