【发布时间】:2021-01-12 02:02:46
【问题描述】:
我正在尝试检查给定数字是否为素数,但我遇到了问题。这是代码:
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
bool isPrime(int input)
{
for (int i = sqrt(input); i >= 2; i--)
{
if (input % i == 0)
{
return false;
}
return true;
}
}
int main()
{
int input;
scanf("%d", &input);
if (isPrime(input))
{
printf("Is prime number");
} else
{
printf("Is not prime number");
}
return 0;
}
在我的isPrime函数的代码块中,如果我像上面一样将return true;放在for循环中,这在某些情况下会出错(例如,当input为10时,它将声明为10是素数)。但是,如果我将return true; 放在 for 循环之外,它就可以正常工作。那么有什么区别呢?
【问题讨论】:
-
return true;立即结束函数,返回值为true。所以当你输入 10 时,函数会检查 10 / 3,然后返回true。 -
确实,如果您只在检查所有潜在除数后才返回 true,而不是在第一个除数之后,它会返回正确结果,真是令人惊讶。
-
编译器警告:
isPrime:并非所有控制路径都返回值。请将return true移到循环外。编译器警告可以帮助您。 -
这不是 Python。即使您没有缩进
return true;行并不意味着它不在循环块内。在 C 中,缩进与编译器无关。
标签: c loops for-loop primes function-definition