在主函数中调用结构

calling structure into main function

我正在编写代码来查找两个素数。为此,我需要 return 函数 primefactor() 中的两个值。我正在使用一个结构来 return 这两个值。

#include <stdio.h>
#include<stdbool.h>

struct tuple  {
    long int prime1,prime2;
};

typedef struct tuple primefind;

bool isPrime(int n) 
{ 
    // Corner case 
    if (n <= 1)  return false; 
  
    // Check from 2 to n-1 
    for (int i=2; i<n; i++) 
        if (n%i == 0) 
            return false; 
  
    return true; 
} 

long int nextPrime(long int n)
{
    // Base case
    if (n <= 1)
        return 2;
    long int prime = n;
    bool found = false;
    // Loop continuously until isPrime returns
    // true for a number greater than n
    while (!found)
    {
        prime++;
        if (isPrime(prime))
            found = true;
    }
    return prime;
}

primefind primeFactor(long int n)
{
    primefind tuple1;
    long int p, q;

    p = 2;
    while (p <= (n / p))
    {
        if (n % p == 0)
        {
            q = n / (p);
            break;
        }
        p = nextPrime(p);
    }

    tuple1.prime1 = p;
    tuple1.prime2 = q;
    return tuple1;
}


int main()
{
    
    
    return 0;
}

如何在主函数中打印 primeFactor 函数的两个变量 p,q 的值?

谢谢。

只需在 main() 函数中创建一个对象(结构)并将其分配给 primeFactor() 函数的 return 值。

int main()
{
    primefind data =  primeFactor(50);
    printf("prime1 = %ld\n", data.prime1);
    printf("prime2 = %ld\n", data.prime2);
    return 0;
}

像这样

   primefind result = primeFactor(42);
   printf("%ld %ld \n", result.prime1, result.prime2);

显而易见的解决方案有什么问题吗?

primefind primes = primeFactor(n);
printf("%ld %ld\n", primes.prime1, primes.prime2);

您也可以考虑改变您的方法并为您的 return 值使用函数参数:

void primeFactor(long int n, long int *prime1, long int *prime2)
{
    // ...
    *prime1 = 7;
    *prime2 = 11;
    return;
}

另外请考虑只检查不超过您的数字的平方根的因数。