我想知道我在写这个简单的函数时可能做错了什么,如果给定的数字是素数,它应该返回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++初学者,如果有人能帮助我纠正我的逻辑,我将非常感激。 祝你今天过得愉快:)
当前的问题在于这两行:
isPrime(2);
if (!isPrime)
第一行调用函数并丢弃返回的值。 第二行将指向函数的指针转换为bool
。 您代码的输出并不取决于您在IsPrime
中实际执行的操作。
这不是您调用函数和使用其结果的方式!
相反,你想要
if (isPrime(2)) {
或
bool isP = isPrime(2);
if (isP) { ...
正如评论中提到的,在IsPrime
的实现中也存在问题,但我希望这足以让您回到正确的轨道上。
PS:您应该去掉全局变量status
。 您不需要两者,返回值和存储结果的全局,如果您可以选择,您绝对应该选择返回值。