[英]Boolean function encounters with warning as "not all control paths return a value" or "control reaches end of non-void function"?
#include <iostream>
using namespace std;
bool isPrime(int);
int main()
{
int n;
cout<<"Enter range to print Prime Numbers\n";
cin >> n;
// 1 to 10 - 2,3,5,7
for(int i = 2;i<=n;i++){
if(isPrime(i)){
cout<<i<<", "; //if it is PN
}
}
cout<<endl;
return 0;
}
bool isPrime(int n) {
int i;
for(i = 2;i<=n/2;i++){ //-n/2
if(n % i == 0){
return false;
break;
}
}
if(i > n/2){
return true;
}
}
这里 bool 函数用于判断输入数是否为素数,并在其中的每个条件语句处返回值,但仍然存在在所有控制路径中不返回值的错误???
如果控制在循环之后到达 if 语句,则保证i > n/2
为true
。 但是,编译器不知道这一点,如果条件为false
,它会看到没有返回值,因为没有 else 分支,也没有其他语句。 这里的解决方案是循环结束后直接返回true
; 无需检查必须为真的条件。
一些额外的改进:
using namespace std;
应该避免。 相反,您可以只为您实际需要的命名空间成员编写 using 声明。isPrime
函数中检查的因子范围。return false;
后的break
语句; 因为它永远也达不到。#include <iostream>
using std::cout, std::cin, std::endl;
bool isPrime(int);
int main() {
int n;
cout << "Enter range to print Prime Numbers\n";
cin >> n;
for (int i = 2; i <= n; i++) {
if (isPrime(i)) {
cout << i << ", ";
}
}
cout << endl;
return 0;
}
bool isPrime(int n) {
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.