繁体   English   中英

布尔函数遇到警告为“并非所有控制路径都返回值”或“控制到达非无效函数的结尾”?

[英]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/2true 但是,编译器不知道这一点,如果条件为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM