如何在C语句中执行print语句后修复程序打印0?

时间:2016-10-31 02:38:06

标签: c function

该程序测试Goldbach的猜想,打印给定的偶数整数作为两个素数的总和。在打印第一个之后,给定的整数将迭代2,然后找到该整数的两个素数之和。依此类推,直到程序被用户中断。

这个问题是该程序打印了一个' 0'在每次执行的print语句之后。

代码:

#include <stdio.h>
#include <math.h>

int GC(int goldsum);  //function prototype 

int main()
{
    int goldsum;

    printf("Enter an even integer greater than 5: ");
    scanf("%d", &goldsum);

    printf("%d\n", GC(goldsum));

    goldsum = goldsum + 2;

    printf("%d\n", GC(goldsum));

}

int GC(int goldsum)  //function definition
{
    int i, j;       //prime addends
    int div1, div2;  //divisors
    char prime1, prime2;  

    for (i=2 ;i<goldsum ;i++) //when number is less than goldsum, run this loop iterating by 1
    {                   
        prime1 = 1;     
        for (div1=2 ;div1<i ;div1++)  //this loop determines if "i" is prime. 
            if (i % div1 == 0)  //if yes, the prime number is stored in "i"
                prime1 = 0;
        if (prime1)              
        {
            for (j=3; j<goldsum; j+=2)  //when number is less than goldsum, run this loop iterating by 2
            {
                prime1 = 1;
                for (div2=2; div2<j; div2++)   //this loop determines if "j" is prime.
                    if(j % div2 == 0)    //if yes, the prime number is stored in "j"
                        prime1 = 0;
                if (prime1)
                    if (i + j == goldsum)  //If i + j = goldsum, it prints the result. 

                    {
                        printf("%d + %d = %d\n",i ,j , goldsum);
                        return 0;
                    }

            }
        }
    }
    return 0;
}

输出:

Enter an even integer greater than 5: 10
3 + 7 = 10
0
5 + 7 = 12
0

我希望它看起来像:

Enter an even integer greater than 5: 10
3 + 7 = 10
5 + 7 = 12

2 个答案:

答案 0 :(得分:0)

也许你误解了我们放入return 0;的{​​{1}}。每个函数都必须返回我们想要的值。在main的情况下,我们想要0因为这意味着一切都很好。对于您的函数,返回值应该是您想要的。

编辑:重新阅读问题并添加以下内容:由于您不希望函数返回值,因此您应将其声明为main()而不是void中的所有值,因为所有您想要的打印功能在您的功能中。

Void函数不返回值,这就是你想要的。

答案 1 :(得分:0)

仅使用GC(goldsum); 而不是printf("%d\n", GC(goldsum));