提问者:小点点

这个布尔函数有什么问题?


我想知道我在写这个简单的函数时可能做错了什么,如果给定的数字是素数,它应该返回true;如果不是素数,它应该返回false。

bool isPrime(int num)
{
    if (num <= 1)
    {
        status = false;
    }
    else
    {
        for (int i = 1; i <= num; i++)
        {
            if (num % i == 0)
            {
                dividers++;
            }
        }
        if (dividers == 2)
        {
            status = true;
        }
        else 
        {
            status = false;
        }
    }
    return status;
}

很明显,我的main看起来是这样的:

bool isPrime(int num);
bool status;
int dividers = 0;

int main() {

    isPrime(2);
    if (!isPrime)
    {
        std::cout << "Not prime" << std::endl;
    }
    else
    {
        std::cout << "Prime" << std::endl;
    }

    return 0;
}

我是一个C++初学者,如果有人能帮助我纠正我的逻辑,我将非常感激。 祝你今天过得愉快:)


共1个答案

匿名用户

当前的问题在于这两行:

isPrime(2);
if (!isPrime)

第一行调用函数并丢弃返回的值。 第二行将指向函数的指针转换为bool。 您代码的输出并不取决于您在IsPrime中实际执行的操作。

这不是您调用函数和使用其结果的方式!

相反,你想要

if (isPrime(2)) { 

bool isP = isPrime(2);
if (isP) { ...

正如评论中提到的,在IsPrime的实现中也存在问题,但我希望这足以让您回到正确的轨道上。

PS:您应该去掉全局变量status。 您不需要两者,返回值和存储结果的全局,如果您可以选择,您绝对应该选择返回值。