当布尔值在主(c ++)中为TRUE或FALSE时,如何使布尔函数的结果输出某个语句?

问题描述 投票:2回答:2

Problem

我正在尝试编写一个可以输出所有数字素因子的程序。我开始创建一个函数来检查一个因子是否为素数:

bool checkPrime() {
for (x = 1; x <= i; ++x) {
    if (x % i != 0) {
        return 1;
    }
    else {
        return 0;
    }
}

Main

int main() {

cout << "Enter any positive number: " << endl;
cin >> n;

cout << "Prime Factors of " << n << " are: " << endl;
for (i = 1; i <= n; ++i) {
    if (n % i == 0) {
        for (x = 1; x <= i; ++x) {
                cout << i << "   ";
        }
}
cout << "\n";
system("pause");

}

Question

如何实现我的“checkPrime”功能来检查我是否运行:

cout << i << "   ";
c++ function boolean factors
2个回答
1
投票

我认为问题是将checkPrime()函数的布尔返回值打印为truefalse。在这个答案中,我没有进入checkPrime()函数的正确性。但为了您的目的,请使用以下内容。

std::cout << std::boolalpha << checkPrime() << std::noboolalpha << std::endl;

参考:https://en.cppreference.com/w/cpp/io/manip/boolalpha

我没有看你checkPrime()函数,但理想情况下它应该接受n作为参数。


0
投票
  1. 更改checkPrime以接受输入。
  2. 修复实现。目前的实施不正确。
  3. main中添加对函数的调用,并根据函数的返回值输出数字。

bool checkPrime(int i)
{
   // 1 and 2 are primes
   if ( i < 2 )
   {
      return true;
   }

   if ( i % 2 == 0 )
   {
      return false;
   }

   // Check with only odd numbers.
   // Division by even numbers is not necessary.
   // Even numbers greater than 2 are not prime numbers.
   // Also, you don't need to check for division by numbers greater than sqrt(i)

   for (x = 3; x*x <= i; x +=2 )
   {
      if ( i % x == 0)
      {
         return false;
      }
   }

   return true;
}

main

for (i = 1; i <= n; ++i)
{
   if (n % i == 0 )
   {
      if ( checkPrime(i) )
      {
         cout << i << "   ";
      }
   }
}

您可以将两个if语句组合成一个if语句。

for (i = 1; i <= n; ++i)
{
   if (n % i == 0 && checkPrime(i) )
   {
      cout << i << "   ";
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.