簡體   English   中英

為什么我的用戶定義函數的return語句在某些情況下不起作用?

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

我的素數檢查功能顯示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.

它應該打印“轉到主要功能”。 一次,然后進入主要功能。 但是它並沒有經過整個功能,然后進入主功能。 誰能幫助我解決這個問題?

代替

prime_function(num,++i);

你要

return prime_function(num,++i);

您需要檢查對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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM